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 :

Aide pour requête JOIN Please


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Aide pour requête JOIN Please
    Bonjour,

    j'ai besoin d'un coup de main sur une requête apriori pas trop compliquée mais je galère depuis 2h dessus

    voilà la problématique :

    J'ai 2 tables


    Table magasins

    id_mag | nom_ mag|
    1 | mag 1
    2 | mag 2
    3 | mag 3
    4 | mag 4
    5 | mag 5
    6 | mag 6
    7 | mag 7

    Table Enseigne_assoc

    id_enseigne_assoc | ref_enseigne | ref_magasin
    1 | 1 | 1
    2 | 2 | 1
    3 | 1 | 2
    4 | 1 | 3
    5 | 1 | 4
    6 | 2 | 4

    Je n'arrive pas à trouver la requète me permettant de ressortir
    tous les magasin avec ref_enseigne = 1 ou 2
    mais avec uniquement le magasin avec l'enseigne (ref_enseigne) = 2 si le magasin appartient à 2 enseignes ...

    merci d'avance pour votre aide je pédale ...

    Arnaud

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ben c'est juste un max non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ref_magasin, max(ref_enseigne)
      from Enseigne_assoc
     where ref_enseigne in (1,2)
     group by ref_magasin

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Qu'as-tu déjà essayé comme requête ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Effectivement le max dans ce cas précis peut faire l'affaire mais si il y a 3 ref_enseigne et que je les groupe en gardant les ref_enseigne 2 si plusieurs lignes pour un magasin ... cela ne convient plus

    pour l'instant j'ai essayé un truc dans ce style (qui ne marche pas bien sur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT magasins.* FROM magasins AS mag
    INNER JOIN enseigne_assoc
    ON mag.id_mag = enseigne_assoc.ref_magasin
    WHERE enseigne_assoc.ref_enseigne = '1' OR enseigne_assoc.ref_enseigne = '2'
    GROUP BY mag.id_mag
    HAVING ( enseigne_assoc.ref_enseigne = '2' )

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par itklif2 Voir le message
    Effectivement le max dans ce cas précis peut faire l'affaire mais si il y a 3 ref_enseigne et que je les grouper en gardant les ref_enseigne 2 si plusieurs lignes pour un magasin ... cela ne convient plus
    Pouvez-vous décrire ce cas de figure avec un exemple et le résultat escompté

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Donc admettons ce schema :

    Table magasins

    id_mag | nom_ mag|
    1 | mag 1
    2 | mag 2
    3 | mag 3
    4 | mag 4
    5 | mag 5
    6 | mag 6
    7 | mag 7

    Table Enseigne_assoc

    id_enseigne_assoc | ref_enseigne | ref_magasin
    1 | 1 | 1
    2 | 2 | 1
    3 | 3 | 1
    4 | 1 | 3
    5 | 3 | 4
    6 | 2 | 4

    j'aimerais avoir comme résultat :

    1 | mag 1 | 2
    3 | mag 3 | 1
    4 | mag 4 | 2

    le MAX ne va t il pas me ressortir plutot cela ? :

    3 | mag 3 | 1
    4 | mag 4 | 2

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Est-ce qu'il peut y avoir d'autres enseignes que la 1 ou la 2 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pourquoi voulez vous que le magasin 1 disparaisse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select m.id_mag, m.nom_mag, max(a.ref_enseigne)
      from magasins m
      join Enseigne_assoc a on a.ref_magasin = m.id_mag
     where a.ref_enseigne in (1, 2)
     group by m.id_mag, m.nom_mag
     order by m.id_mag
     
        ID_MAG NOM_M MAX(A.REF_ENSEIGNE)
    ---------- ----- -------------------
             1 mag 1                   2
             3 mag 3                   1
             4 mag 4                   2

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Oui mais je ne souhaite ressortir que les lignes avec enseigne 1 ou enseigne 2 ,
    une seule ligne par magasin (en gardant l'enseigne 2 si le magasin fait parti des enseignes 1 et 2)
    les magasins qui auraient l'enseigne 3 ne doivent pas ressortir (sauf si ils on aussi enseigne 1 ou 2)

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Oui mais je ne souhaite ressortir que les lignes avec enseigne 1 ou enseigne 2 ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where a.ref_enseigne in (1, 2)
    une seule ligne par magasin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    group by m.id_mag, m.nom_mag
    (en gardant l'enseigne 2 si le magasin fait parti des enseignes 1 et 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(a.ref_enseigne) -- car 2 > 1
    les magasins qui auraient l'enseigne 3 ne doivent pas ressortir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where a.ref_enseigne in (1, 2) -- Ils ne sont pas sélectionnés
    (sauf si ils on aussi enseigne 1 ou 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where a.ref_enseigne in (1, 2) -- ceux là le sont...
    Sinon vous est-il possible de tester la requête proposée ?

    Il y a peut être une subtilité dans ce que vous voulez que vous n'arrivez pas retranscrire mais en l'état de la description du problème et du jeu de test fourni, ma requête semble convenir.

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Cette requête devrait correspondre à ce que tu attends
    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
    19
    20
    21
    22
    23
    24
    SELECT  mag.id_mag
        ,   mag.nom_mag
        ,   ens.ref_enseigne
    FROM    magasins        mag
        INNER JOIN
            enseigne_assoc  ens
            ON  mag.id_mag  = ens.ref_magasin
    WHERE   ens.ref_enseigne    = 2
    UNION
    SELECT  mag.id_mag
        ,   mag.nom_mag
        ,   ens.ref_enseigne
    FROM    magasins        mag
        INNER JOIN
            enseigne_assoc  ens
            ON  mag.id_mag  = ens.ref_magasin
    WHERE   ens.ref_enseigne    = 1
        AND NOT EXISTS
            (   SELECT  NULL
                FROM    enseigne_assoc  en2
                WHERE   en2.ref_enseigne    = 2
                    AND en2.ref_magasin     = mag.id_mag
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  12. #12
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    MERCI !

    les 2 requêtes fonctionnent correctement

    la 1ère est plus simple et fait l'affaire pour mon cas de figure, la seconde offre me permet de comprendre la syntaxe de ce que je voulais faire initialement :-) et pourra me servir

    merci encore pour votre aide précieuse

  13. #13
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    une autre solution
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    WITH magasins AS 
    (
     
     
    select 1 id_mag, 'mag 1'nom_mag FROM dual union
    select 2 , 'mag 2' FROM dual union
    select 3 , 'mag 3' FROM dual union
    select 4 , 'mag 4' FROM dual union
    select 5 , 'mag 5' FROM dual union
    select 6 , 'mag 6' FROM dual union
    select 7 , 'mag 7' FROM dual),
     
     Enseigne_assoc as
    (
    select 1 id_enseigne_assoc, 1 ref_enseigne, 1 ref_magasin FROM dual union
    select 2 , 2 , 1 FROM dual union
    select 3 , 3 , 2 FROM dual union
    select 4 , 1 , 3 FROM dual union
    select 5 , 3 , 4 FROM dual union
    select 6 , 2 , 4 FROM dual 
     
     
    )
     
    SELECT max(A.ref_enseigne)ref_enseigne,A.ref_magasin, B.nom_mag 
    FROM Enseigne_assoc A join  magasins B on B.id_mag=A.ref_magasin
    WHERE exists (SELECT  * FROM enseigne_assoc C
    where A.id_enseigne_assoc=C.id_enseigne_assoc
    and C.ref_enseigne in(1,2))
    GROUP BY ref_magasin,B.nom_mag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    REF_ENSEIGNE    REF_MAGASIN    NOM_MAG
    1                        3                        mag 3
    2                        1                        mag 1
    2                        4                        mag 4
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

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

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. [SQL] Aide pour requête
    Par portu dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 13h05
  3. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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