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 :

Débutant SQL, problème sur une jointure censée exclure ??


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut Débutant SQL, problème sur une jointure censée exclure ??
    Bonjour,

    J'ai deux tables très simples('test' et 'temoin') avec un champ('ID', unique et non nul) identique dans ces deux tables.
    Je souhaite trouver toutes les lignes présentes dans 'temoin' et pas dans 'test' en faisant une jointure sur ce champ ID ?? Simple ??

    SELECT DISTINCT temoin.id
    FROM temoin, test
    WHERE temoin.id <> test.id

    Le problème est qu'il m'affiche en résultat tous les enregistrements de la table 'temoin', par contre si la condition est une égalité, il ne m'affiche que les enregistrements commun(ce qui est normal)...

    J'ai du faire une erreur de base mais je ne sais pas laquelle ??
    Merci.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select	ID
    from	TEMOIN
    where	ID   not in	
    		(	select	ID
    			from	TEST
    		)
    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.

  3. #3
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Salut,

    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id
    FROM temoin
    MINUS
    SELECT id
    FROM test

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si on fait la liste des possibilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t.id 
    FROM temoin t LEFT OUTER JOIN test s  USING (id)
    WHERE s.id IS NULL
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Merci pour toutes ces réponses, mais est-ce que quelqu'un pourrait m'expliquer pourquoi la comparaison

    WHERE test.id <> temoin.id

    ne fonctionne pas ??

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    parce que tu cherches toutes les lignes d'une table pour lesquelles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il existe une ligne avec un id different dans l'autre
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il n'existe pas de ligne avec le même id
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Pour shématiser, si tu as tes 2 tables qui valent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id.temoin          id.test
    1                      2
    2                      3
    3
    4
    Sans jointure, tu fais le produit cartésien, tu obtiens donc les couples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    id.temoin         id_test
    1                     2
    1                     3
    2                     2
    2                     3
    3                     2
    3                     3
    4                     2
    4                     3
    Ainsi en faisant id.temoin<>id.test, tu récupères les couples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id.temoin         id_test
    1                     2
    1                     3
    2                     3
    3                     2
    4                     2
    4                     3
    Tu récupères donc bien des occurences de id.temoin égales à 2 ou 3 alors que tu souhaites les exclures.....

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Je comprends pas trop ce ke tu veux mais je te propose une requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct temoin.id
    from temoin
     
    MINUS
     
    Select distinct test.id
    from test
    Si temoin vaut
    1
    2
    3

    et test vaut
    1
    3
    5
    6
    7

    Le résultat est
    2

    Et en plus ta requete fait un produit cartésien ...

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Ok, parfait, c'est au niveau du produit cartésien.
    Merci, à tous.

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

Discussions similaires

  1. Problème sur une jointure
    Par gotcha5832 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/04/2014, 12h48
  2. Réponses: 40
    Dernier message: 02/11/2011, 17h41
  3. Problème sur une jointure, enfin je crois
    Par zooffy dans le forum Développement
    Réponses: 6
    Dernier message: 07/02/2009, 11h44
  4. Erreur SQL sur une jointure
    Par sebhm dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/11/2008, 00h18
  5. sql mon ami. problème sur une syntaxe
    Par sebinator dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/07/2008, 17h38

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