Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1419 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Détecter l'inexistance de correspondance. Jointure ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Détecter l'inexistance de correspondance. Jointure ?

n°2013198
Pascal le ​nain
Posté le 30-07-2010 à 14:24:14  profilanswer
 

Bonjour,
 
J'ai une table A :


id
-----
1
43
35
23
2
4
5


 
Et une table B :
 

id
----
1
3
5
456
21
43


 
Je veux récupérer tous les enregistrements de la table A dont l'id ne figure pas dans le champs id de la table B.
Par exemple ici, on récupérerait les enregistrements 35, 23, 2 et 4.
C'est assez simple, mais je vois mal comment l'implémenter.
Je pensais à une jointure, mais la jointure se base sur des correspondances, et c'est justement ce que l'on veut éviter...
Une anti-jointure alors ?  :p  
 
Pourriez-vous me donner un coup de pouce ?
 
Merci d'avance  ;)


Message édité par Pascal le nain le 30-07-2010 à 14:26:21
mood
Publicité
Posté le 30-07-2010 à 14:24:14  profilanswer
 

n°2013284
shaoling
Posté le 30-07-2010 à 19:16:48  profilanswer
 

Salut
 
Tu peux tenter ceci :
 

SELECT * FROM table_a WHERE id NOT IN (SELECT id FROM table_b)


Message édité par shaoling le 30-07-2010 à 19:18:20

---------------
>> Culture-Info : La culture informatique pour tous (projet scolaire) <<
n°2013302
mrbebert
Posté le 30-07-2010 à 21:42:59  profilanswer
 

Sinon, on peut faire une jointure avec le LEFT JOIN (qui va "lier" les lignes de la 2ème table si elles existent et mettre les champs à NULL sinon) et filtrer sur les champs à NULL.
Quelque chose du type :

Code :
  1. SELECT A.*
  2. FROM table_a
  3. LEFT JOIN table_b ON table_b.id=table_a.id
  4. WHERE b.id IS NULL


 
La solution avec le "NOT IN" est très certainement à préférer :)  

n°2013325
Pascal le ​nain
Posté le 31-07-2010 à 05:27:10  profilanswer
 

Nickel ca marche :)
Merci à vous deux ;)


Message édité par Pascal le nain le 31-07-2010 à 05:27:18
n°2013806
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 09:41:24  profilanswer
 

Le plus propre, c'est d'utiliser la clause NOT EXISTS qui est justement prévue pour ça : http://dev.mysql.com/doc/refman/5. [...] eries.html


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2013813
Pascal le ​nain
Posté le 03-08-2010 à 09:47:25  profilanswer
 

Encore mieux, merci ;)

n°2013863
shaoling
Posté le 03-08-2010 à 10:55:28  profilanswer
 

NOT EXISTS apporte quoi de plus que NOT IN dans ce cas ?


---------------
>> Culture-Info : La culture informatique pour tous (projet scolaire) <<
n°2013872
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 11:03:06  profilanswer
 

IN (ie NOt IN) n'est pas optimisé, c'est une instruction lente quand il y a beaucoup d'enregistrements. Après, il se peut que l'optimiseur de requête de MySQL convertisse ton NOT IN en NOT EXISTS mais c'est pas sûr. Quoi qu'il en soit, toi, tu veux savoir si un enregistrement d'une table existe (ou pas) dans une autre table, d'un point de vue sémantique, c'est EXISTS (ie NOT EXISTS) qu'il faut utiliser ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Détecter l'inexistance de correspondance. Jointure ?

 

Sujets relatifs
MySQL : vérification de syntaxe de double jointurejointure avec 3 champs ?
Detecter changement d'url ou naviguationDétecter une modification d'un projet
Postgresl, probleme de jointure[RESOLU][SQL/ACCESS] Problème jointure
Detecter des liens affiliésdetecter materiel via batch .bat
[Résolu] Jointure entre deux tablesUpdate avec jointure (SQL Oracle)
Plus de sujets relatifs à : Détecter l'inexistance de correspondance. Jointure ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR