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 :

Difficulté pour batir une requête simple


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut Difficulté pour batir une requête simple
    * Bonjour, *

    Soit une table1 avec le champ ID

    Soit une table2 avec le champ ID_REF

    Soit une table3 avec le champ ID_REF


    Je voudrais sélectionner les enregistrements ID de table1 qui ne sont sont pas égaux aux valeurs du champ ID_REF présents dans table2 et table3

    J'ai essayé cela... mais j'ai un erreur "ambiguous" sur ID_REF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT ID FROM table1 , table2, table3 WHERE ID <> ID_REF GROUP BY ID
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,

    Dans la requête présentée, l'erreur vient du fait qu'il y a ambiguïté sur id_ref: le moteur ne sait pas s'il faut lire celui de table2 ou table3.

    Par contre j'ai un doute sur l'énoncé: il faut la liste des table1.id qui ne sont pas dans table2.id_ref ni dans table3.id_ref ? Si c'est bien le cas, la piste n'est pas la bonne. Il faudrait voir du côté de NOT IN, NOT EXISTS...
    Pour lever le doute, il faudrait un jeu de test et le résultat attendu.

    Tatayo.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut
    Oui, c'est bien cela. Exemple

    Table1.ID
    1
    2
    3
    4
    5

    Table2.ID_REF
    2
    3

    Table3.ID_REF

    3
    4
    3

    La requête doit rendre 1 et 5 (non présents dans table2 et table3)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Un début de solution dans cette discussion.
    Il suffit d'adapter les réponses avec 3 tables.

    Tatayo.

  5. #5
    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
    Je te propose 3 solutions
    Solution1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select A.ID  from table1 A left join table2 B on A.ID=B.ID_REF left join  table3 C on A.Id=C.ID_REF
    where B.ID_REF is  null and C.ID_REF is  null
    Solution2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select A.ID  from table1 A 
    where A.ID not in (select ID_REF from table2 union
                       select ID_REF from table3)
    Solution3
    minus, selon le SGBD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select A.ID from table1 A 
    minus
    (select ID_REF from table2 
    union 
    select ID_REF from table3)
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    Solution3
    minus, selon le SGBD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select A.ID from table1 A 
    minus
    (select ID_REF from table2 
    union 
    select ID_REF from table3)
    Il me semble que la norme indique EXCEPT dans ce cas.

    Tatayo.

  7. #7
    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
    Je l'ai testé sous Oracle,c'est pour ça j'ai selon SGBD. ça se peux que ça marche avec EXCEPT sous d'autre SGBD.
    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. Réponses: 2
    Dernier message: 05/09/2012, 11h51
  2. Réponses: 2
    Dernier message: 04/09/2012, 10h19
  3. [AC-2003] Difficulté pour faire une requête
    Par ouinih dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/02/2012, 19h09
  4. des difficultés pour comprendre une requête
    Par johnny3 dans le forum Schéma
    Réponses: 5
    Dernier message: 10/08/2008, 19h43
  5. Réponses: 7
    Dernier message: 03/06/2004, 12h46

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