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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Pour quelle raison doit-il garder le 3 jaune ?

    Tu as commencé une requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    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 averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    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 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Quel est votre SGBD ?

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

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

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ 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