IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête sql avec plusieurs fois le même champ de la même table mais de fiche différente


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2020
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Requête sql avec plusieurs fois le même champ de la même table mais de fiche différente
    J'ai passé la journée sans réel succès, en gros j'ai une table OPERATION avec 2 Forein key d'une même table (CONTACT) et je voudrais faire une requête qui remplace l'id des forein key par le nom_contact de la dite table CONTACT.

    En farfouillant j'ai réussi a faire une sous requête mais en faisant les tests avec plusieurs jeux de données le résultat n'est plus cohérent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT
      o.id_operation,
      o.ville_operation,
      o.note_operation,
      c.nom_contact as "Commercial",
      ch.nom_contact as "Chef de chantier"
     
    FROM Contact c, Operation o
          JOIN (SELECT c.nom_contact
              FROM Contact c
              LEFT JOIN Operation o ON o.id_contact_A_pour_chef_de_chantier = c.id_contact
              WHERE c.id_poste = 2
          ) ch ON c.id_contact = o.id_contact_A_pour_commercial
          WHERE c.id_poste = 1
    group by ch.nom_contact, id_operation;
    Concrètement, le champ id_poste est une ForeinKey d'une table POSTE avec comme id 1="Commercial"; 2="Chef de projet"
    Mais là à l'heure actuelle ça me donne toutes les combinaison possible entre les contacts dont le poste est 1 avec ceux des 2 mais du coup ça ne correspond pas à me requête.
    Je sens que je suis a deux doigts mais c'est toujours à ce moment que quelque chose m'échappe.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    C'est sans doute cela que tu cherchais à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT  ope.id_operation
        ,   ope.ville_operation
        ,   ope.note_operation
        ,   com.nom_contact AS "Commercial"
        ,   cht.nom_contact AS "Chef de chantier"
    FROM    Operation   ope
        LEFT JOIN
            Contact     com
            ON  com.id_contact  = ope.id_contact_A_pour_commercial
            AND com.id_poste    = 1
        LEFT JOIN
            Contact     cht
            ON  cht.id_contact  = ope.id_contact_A_pour_chef_de_chantier
            AND cht.id_poste    = 2
    ORDER BY cht.nom_contact
        ,   ope.id_operation
    ;
    Dans ta requête il n'y avait pas de liaison entre les lignes opération et contact appelées à la ligne 8.
    C'est pour cela qu'il est préférable de toujours effectuer ses jointures avec l'opérateur JOIN ; on ne peut alors pas manquer les conditions de jointure (en plus de rendre le code plus lisible en séparant conditions de jointure et conditions de restriction )

    Je n'ai pas bien saisi l'intérêt du GROUP BY dans ta requête. Tu voulais sans doute ordonner les lignes retournées ?
    C'est un effet de bord dans certains SGBD d'ordonner une requête sur les conditions du regroupement mais il ne faut compter dessus. La seule manière fiable d'ordonner le résultat d'une requête est la clause ORDER BY.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2020
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    En fait c'est surtout que je pensais pas qu'on pouvait faire un alias d'une table de cette façon mais du coup pour les liaisons justement je voyais pas trop comment aborder ça et là j'apprends vraiment sur le tas alors que pourtant j'ai eu des cours en école. J'en étais vraiment à me demander si je devais pas me refaire des tables uniques (ce qui n'est du coup plus en accord avec la méthode merise).

    Oui j'ai vu qu'avec group by ça me les mettait en ordre, du coup merci pour ton aide précieuse. Mon problème a commencé quand je voulais faire une requête avec l'id que je récupère en ResultSet dont je bouclais déjà le résultat pour mettre les données dans un tableau en me rendant compte qu'avec ma bdd je ne pouvais pas gérer plusieurs statement, l'horreur, j'ai essayé de trouver des solutions pansement trèèès couteuses jusqu'au moment où je me dis "Non mais att pourquoi tu fais juste pas une bonne requête ????". Une tonne de temps de perdu très bêtement, merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 27/11/2019, 18h33
  2. [MySQL] Formulaire avec plusieurs fois le même champ et récupération des valeurs
    Par aunisien dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/09/2016, 19h43
  3. [8i] Requête SQL avec jointure sur la même table
    Par masterdash dans le forum SQL
    Réponses: 13
    Dernier message: 10/03/2016, 20h56
  4. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 08h44
  5. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo