SQL jointure externe gauche sur plusieurs colonnes
Selon cette Jointure SQL cheat-sheet, une jointure externe gauche sur une colonne est la suivante :
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
WHERE b.foo IS NULL
Je suis vous demandez-vous à quoi il pourrait ressembler, avec une jointure sur plusieurs colonnes, il devrait être une OR
ou un AND
dans le WHERE
clause ?
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
OR b.bar IS NULL
OR b.ter IS NULL
ou
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
AND b.bar IS NULL
AND b.ter IS NULL
?
(Je ne le pense pas, mais en cas de questions, le moteur de base est Vertica)
(Je parie sur le OR
un)
OriginalL'auteur François M. | 2016-10-13
Vous devez vous connecter pour publier un commentaire.
Cela dépend si les colonnes sont nullable, mais en supposant qu'ils ne sont pas, en vérifiant l'un d'eux va faire:
C'est parce qu'après avoir réussi à rejoindre, tous les trois colonnes ont une valeur non null.
Si certaines de ces colonnes ont été les valeurs null et que vous souhaitez vérifier si l'un d'eux avait une valeur après la jointure, alors votre premier (
OR
) approche serait OK.OriginalL'auteur Cristian Lupascu
Vous pouvez utiliser n'importe quelle combinaison de critères pour nous rejoindre:
La
WHERE
clause n'a rien à voir avec la rejoindre.Le
WHERE b.foo IS NULL
dans la première requête renvoie tous les enregistrements dea
qui n'avait pas les enregistrements correspondants dansb
ou lorsqueb.foo
étaitnull
.OriginalL'auteur Amir Rahimi Farahani