1. #1
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut Requêtes imbriquées et Affichage résultat

    Hello tout le monde

    je me heurte à un problème pour afficher les résultats d'une imbrication de requête !

    je vous explique.

    Ma première requête est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct fam_cdr from mgfam where fam_cdf in (select art_cdf from mgart where art_noart in (select vul_noart from mgvul where vul_cdfo='NUMERO DU FOURNISSEUR'));
    elle me retourne les rayons associés à une fournisseur
    elle fonctionne très bien mais je suis obligé de rentrer mes numéros de fournisseur 1 par 1, du coup j'ai créé ma liste de fournisseur via la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select fou_cdfo from mgfou where fou_cdfo NOT IN (select distinct eplg_cdfour from enplg
    J'aimerai donc que le résultat de ma requête m'indique les fam_cdr de chaque résultat de la seconde !

    J'ai tester d''imbriquer les deux requêtes pour que avoir les resultats combinés, j'ai essayé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select fam_cdr from mgfam where fam_cdf in (select art_cdf from mgart where art_noart in (select vul_noart from mgvul where vul_cdfo='(select fou_cdfo from mgfou where fou_cdfo NOT IN (select distinct eplg_cdfour from enplg) '))
    mais j'ai un message d'erreur m'indiquant 'sous-requete ramenant un enregistrement de plus d'une ligne ce qui est le but

  2. #2
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 333
    Points : 40 140
    Points
    40 140
    Billets dans le blog
    1

    Par défaut

    Vous pouvez continuez avec les IN / NOT IN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select distinct fam_cdr 
    from   mgfam 
    where  fam_cdf in (select art_cdf 
                       from   mgart 
                       where  art_noart in (select vul_noart 
                                            from   mgvul 
                                            where  vul_cdfo IN (select fou_cdfo 
                                                                from   mgfou 
                                                                where  fou_cdfo NOT IN (select eplg_cdfour 
                                                                                        from   enplg))));
    Cependant il serait peut être temps d'apprendre ce qu'est une jointure !
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT fam_cdr 
    FROM   mgfam AS FM
           JOIN mgart AS AR             ON FM.fam_cdf = AR.art_cd
           JOIN mgvul AS VL             ON AR.art_noart = VL.vul_noart
           JOIN mgfou AS FO             ON VL.vul_cdfo = FO.fou_cdfo
           LEFT OUTER JOIN enplg AS PG  ON FO.fou_cdfo = PG.eplg_cdfou
    WHERE  PG.eplg_cdfou IS NULL;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  3. #3
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Merci beaucoup je n'ai plus l'erreur mais je n'ai pas les résultats que j'attends .. j'obtiens bien une liste de rayon mais je voulais une liste de rayon par fournisseur je vais continuer dans cette voie pour trier

    Merci pour les jointures, je vais tâcher de regarder cela

  4. #4
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Par contre avec la jointure proposée (merci je crois avoir compris le principe du coup)

    j'ai une erreur SQL Commande not properly ended (ligne 2 colonne 12) soit au niveau du AS apparement

  5. #5
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 333
    Points : 40 140
    Points
    40 140
    Billets dans le blog
    1

    Par défaut

    Cette requête est tout à fait valide sur tous les SGBDR appliquant le SQL normatif. Comme vous n'avez pas respecter la règle de postage en indiquant pas votre SGBDR, impossible de vous aider davantage.... Mais je soupçonne que vous êtes sous Oracle.

    A l'avenir respecter la règle de postage. ça évite de faire perdre du temps à tous. A vous comme à nous !!!!
    https://www.developpez.net/forums/a6...gage-sql-lire/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  6. #6
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Ah oui désolé

    je suis bien sur Oracle via sqldeveloper

  7. #7
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 333
    Points : 40 140
    Points
    40 140
    Billets dans le blog
    1

    Par défaut

    Oracle ne respecte pas la norme SQL et ne veut pas de l'opérateur AS pour aliasser une table. Récrivez la requête comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT fam_cdr 
    FROM   mgfam FM
           JOIN mgart AR             ON FM.fam_cdf = AR.art_cd
           JOIN mgvul VL             ON AR.art_noart = VL.vul_noart
           JOIN mgfou FO             ON VL.vul_cdfo = FO.fou_cdfo
           LEFT OUTER JOIN enplg PG  ON FO.fou_cdfo = PG.eplg_cdfou
    WHERE  PG.eplg_cdfou IS NULL;
    Pour avoir en sus le fournisseur, rajoutez dans la clause SELECT la ou les colonnes manquantes.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  8. #8
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Merci beaucoup @SQLPro

    j'ai refait ma requete avec les jointures, j'obtiens ce que je veux ! Il ne me reste qu'une question de tri !

    Voici ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT DISTINCT arv_cdfo, arv_noart, fam_cdr, arv_novar
    FROM mgarv
        JOIN mgart          ON mgart.art_noart = mgarv.arv_noart
        JOIN mgfam          ON mgfam.fam_cdf = mgart.art_cdf
        JOIN mgfou          ON mgfou.fou_cdfo = mgarv.arv_cdfo
    WHERE arv_cdfo NOT IN (select distinct eplg_cdfour from enplg)
    AND arv_flnoncd = 'O'
    AND mgfou.fou_cdblfr is NULL
    ORDER BY arv_cdfo, arv_novar
    j'aimerai afficher les couples de résultats suivants

    Nom : tri.png
Affichages : 34
Taille : 8,4 Ko

    a savoir un couple de 2 arv_noart différents, ayant un fam_cdr différents mais un arv_cdfo et arv_novar identique

    Merci d'avance

  9. #9
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 996
    Points : 6 582
    Points
    6 582
    Billets dans le blog
    1

    Par défaut

    Je ne comprends pas ce que vous cherchez à faire, la clause ORDER BY est d'un usage très simple, citez simplement les colonnes dans l'ordre du tri souhaité :

    ORDER BY Col1, Col2, ..., Coln

  10. #10
    Membre à l'essai
    Homme Profil pro
    Qualification Logicielle
    Inscrit en
    mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Qualification Logicielle

    Informations forums :
    Inscription : mai 2017
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Comme indiqué je souhaite avoir des couples d'enregistrement comme sur l'image où

    cdfo et grv sont identique mais les cdr et art différents

  11. #11
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 996
    Points : 6 582
    Points
    6 582
    Billets dans le blog
    1

    Par défaut

    Si vous ne voulez que ces lignes là (ce n'est toujours pas clair pour moi désolé), alors faites comme ceci :

    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
    SELECT DISTINCT arv_cdfo, arv_noart, fam_cdr, arv_novar
    FROM mgarv
    INNER JOIN mgart ON mgart.art_noart = mgarv.arv_noart
    INNER JOIN mgfam ON mgfam.fam_cdf   = mgart.art_cdf
    INNER JOIN mgfou ON mgfou.fou_cdfo  = mgarv.arv_cdfo
    WHERE NOT EXISTS
         (select 1
          from enplg
          where eplg_cdfour = mgarv.arv_cdfo)
      AND arv_flnoncd = 'O'
      AND mgfou.fou_cdblfr is NULL
      AND EXISTS
         (select 1
          from mgarv       SUB1
          inner join mgfam sub2
             on sub2.fam_cdf   = SUB1.art_cdf
          where SUB1.arv_cdfo  = mgarv.arv_cdfo 
            and SUB1.arv_novar = mgarv.arv_novar 
            and SUB1.arv_noart > mgarv.arv_noart  
            and SUB2.fam_cdr  <> mgfam.fam_cdr)
    ORDER BY arv_cdfo, arv_novar
    Remarquez que j'ai remplacé votre requete WHERE arv_cdfo NOT IN (select distinct eplg_cdfour from enplg) par un test d'existence, qui sera plus performant dans la plupart des cas

Discussions similaires

  1. Requêtes imbriquées pour affichage tableau
    Par CedriZero dans le forum Requêtes
    Réponses: 0
    Dernier message: 21/09/2015, 10h38
  2. Réponses: 13
    Dernier message: 14/03/2011, 15h26
  3. Réponses: 35
    Dernier message: 18/05/2006, 17h42
  4. Affichage requête imbriquée
    Par sql dans le forum PHP & MySQL
    Réponses: 5
    Dernier message: 07/04/2006, 22h48
  5. Affichage résultat de requête dans un champ
    Par dj-julio dans le forum WinDev
    Réponses: 1
    Dernier message: 18/01/2006, 11h51

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