131 votes

Comment exclure les lignes qui ne rejoignent pas une autre table ?

J'ai deux tables, l'une a la clé primaire, l'autre l'a comme clé étrangère.

Je veux extraire des données de la table primaire, seulement si la table secondaire n'a pas d'entrée contenant sa clé. Une sorte d'opposé d'une simple jointure interne, qui ne renvoie que les lignes qui se rejoignent par cette clé.

349voto

Pranay Rana Points 69934

alt text

SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

Image complète de l'adhésion alt text

De l'article : http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx

15voto

gbn Points 197263
SELECT
   *
FROM
   primarytable P
WHERE
   NOT EXISTS (SELECT * FROM secondarytable S
     WHERE
         P.PKCol = S.FKCol)

En général, (NOT) EXISTS est un meilleur choix que (NOT) IN ou (LEFT) JOIN

5voto

The Scrum Meister Points 17215

utiliser une inscription "n'existe pas" restante :

SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL

4voto

Ali Akbar Points 172

Une autre solution est :

SELECT * FROM TABLE1 WHERE id NOT IN (SELECT id FROM TABLE2)

3voto

Tommi Points 5707
SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X