SQL: sélectionner toutes les valeurs uniques dans le tableau A, qui ne sont pas dans la table B
J'ai Une table
Id | Name | Department
-----------------------------
0 | Alice | 1
0 | Alice | 2
1 | Bob | 1
et le tableau B
Id | Name
-------------
0 | Alice
Je veux sélectionner tous les Id uniques dans Une table qui n'existe pas dans le tableau B. comment puis-je faire cela?
OriginalL'auteur an0neemus | 2010-11-15
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur RedFilter
Juste pour donner une autre solution que de ne PAS EN :
La "bonne" solution est généralement de MOINS ou de l'EXCEPTION, mais MySQL ne supporte pas.
Cette question a été posée un peu de temps il y a quelqu'un a posté un article qui compare PAS, n'EXISTE PAS et JOINTURE EXTERNE GAUCHE ... EST NULLE. Il serait intéressant si quelqu'un pouvait retrouver!
OriginalL'auteur Vincent Savard
La plus efficace de la réponse est d'utiliser une jointure gauche, que l'utilisation de "PAS EN" peuvent parfois empêcher une requête à partir de l'utilisation d'un index, si elle est présente.
La réponse dans ce cas serait quelque chose comme
Sinon, c'est plus lisible qu'un left join, et plus efficace que le PAS DANS les solutions
OriginalL'auteur Runonthespot
J'avais utiliser un n'EXISTE PAS Comme cela:
OriginalL'auteur Danny T.
OriginalL'auteur Vladimir Ivanov
OriginalL'auteur Cfreak
La sous-requête obtiendrez tous les Id dans B. La
group by...having
obtiendrez tous les Id uniques dans Un qui sont également pas en B.OriginalL'auteur FrustratedWithFormsDesigner