Recherche de données inexistantes à l'aide de LEFT JOIN
En SQL, il peut être nécessaire de comparer deux tables et d'identifier les données qui existent dans une seule mais pas l'autre. Ce scénario est couramment rencontré lors de la vérification des enregistrements manquants.
Considérez les tableaux suivants :
TABLE1
id | name | address |
---|---|---|
1 | mm | 123 |
2 | nn | 143 |
TABLE2
name | age |
---|---|
mm | 6 |
oo | 9 |
L'objectif est de retrouver les noms inexistants dans le TABLEAU1 en le comparant avec TABLEAU2. Dans ce cas, la deuxième ligne de TABLE1 avec le nom "nn" n'existe pas dans TABLE2.
Une première tentative utilisant un INNER JOIN :
SELECT w.* FROM TABLE1 w INNER JOIN TABLE2 v ON w.name <> v.name
ne parviendra pas à récupérer le fichier souhaité. résultat car INNER JOIN ne renvoie que les lignes où il y a une correspondance dans les deux tables.
La solution réside dans l'utilisation d'un LEFT JOIN à la place :
SELECT w.* FROM TABLE1 w LEFT JOIN TABLE2 v ON w.name = v.name WHERE ISNULL(v.name);
LEFT JOIN effectue une jointure externe, ce qui signifie qu'elle renverra toutes les lignes de la table de gauche (TABLE1), qu'il existe ou non une ligne correspondante dans la table de droite (TABLE2). La condition ISNULL(v.name) vérifie les lignes de TABLE1 où le champ de nom correspondant dans TABLE2 est nul, indiquant que le nom n'existe pas dans TABLE2.
Le résultat sera :
id | name | address |
---|---|---|
2 | nn | 143 |
Cette requête récupère avec succès la ligne de TABLE1 avec le nom inexistant "nn".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!