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 :

Requete SQL complexe sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Requete SQL complexe sur plusieurs tables
    Bonjour,

    Je possède une base de code qui contient deux tables de cette manière :

    Table A :


    Table B :


    J'aimerais en une seule requête, sélectionner tout les éléments de la table A ainsi que les éléments de la table B en ne gardant que les éléments rouge.

    En gros, le résultat devrait être le suivant :



    Je veux donc qu'il prenne tout les éléments de la table A, qu'il me fasse un jointure avec la table B (avec les 2 ID des tables) et comme il y a plusieurs entrées dans la table B portant la même ID, je veux qu'il me garde uniquement l'enregistrement contenant la couleur ROUGE (il supprime UNIQUEMENT s'il existe des doublons pour la même ID).

    Je ne sais pas si j'ai été très clair, je peux essayer d'expliquer le problème d'une autre manière en cas de besoins.


    Merci d'avance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pour quelle raison doit-il garder le 3 jaune ?

    Tu as commencé une requête ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Soit je n'ai pas compris ce que tu voulais, soit il y a une erreur dans ton exemple.
    Je ne comprends pas pourquoi la ligne 3 couleur Jaune figure dans le résultat attendu.

    Concernant ton problème, où est-ce que tu bloques au niveau de l'écriture de la requête, car a priori c'est on ne peut plus simple.
    Tu nous donnes un début de requete et on t'aide à compléter, car si on te donne le résultat tout prêt, tu risques de ne pas progresser.
    [Edit]grillé[/edit]
    A+
    Soazig

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Je me ré-explique :
    - on prend tous les enregistrements de A
    - on récupère les concordances avec B
    - si on trouve une concordance avec Rouge, on garde celle-ci

    En gros, je récupère TOUJOURS les enregistrements de la table A, et si j'ai une concordance avec B, je récupère ses informations (à savoir le statut et la couleur).

    C'est pour ça que j'ai la ligne 3, je veux toujours avoir les occurrences de ma table A.

    Oui j'ai un début de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id, nom, url FROM table_A LEFT JOIN table_B on table_A.id=table_B.ID_TABLE_A GROUP BY id
    Seulement ce n'est pas le résultat attendu.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Quel est votre SGBD ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    MYSQL.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    La requête ci-dessous va donner toutes les lignes de A et B en correspondance en restreignant à la couleur ROUGE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT A.ID, A.NOM, A.URL
      B.STATUT, B.COULEUR
    FROM A
    INNER OUTER JOIN B ON A.ID = B.ID_TABLE_A
    WHERE B.COULEUR = 'ROUGE'
    ORDER BY A.ID
    La requête ci-dessous va donner toutes les lignes de A et la correspondance dans B si elle existe, NULL dans les colonnes de B s'il n'y a pas de correspondance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A.ID, A.NOM, A.URL
      B.STATUT, B.COULEUR
    FROM A
    LEFT OUTER JOIN B ON A.ID = B.ID_TABLE_A
    ORDER BY A.ID
    La requête ci-dessous devrait donner ce que tu veux en unissant la première requête à (la deuxième moins les ID de la première) :
    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
    18
    SELECT A1.ID, A1.NOM, A.URL
      B1.STATUT, B1.COULEUR
    FROM A AS A1
    INNER OUTER JOIN B AS B1 ON A1.ID = B1.ID_TABLE_A
    WHERE B1.COULEUR = 'ROUGE'
     
    UNION
     
    SELECT A2.ID, A2.NOM, A.URL
      B2.STATUT, B2.COULEUR
    FROM A AS A2
    LEFT OUTER JOIN B AS B2 ON A2.ID = B2.ID_TABLE_A
    WHERE A2.ID NOT IN (
      SELECT A3.ID
      FROM A AS A3
      INNER JOIN B AS B3 ON A3.ID = B3.ID_TABLE_A
      WHERE B1.COULEUR = 'ROUGE'
    )
    Si tu ne veux que les ID qui ont une couleur, remplace le LEFT OUTER par INNER.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Ca fonctionne un grand merci

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

Discussions similaires

  1. [SQL] Requête complexe sur plusieurs tables
    Par BFH dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/09/2007, 16h21
  2. SELECT Complexe sur plusieurs tables
    Par eowene dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/01/2007, 14h43
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50

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