使用 LEFT JOIN 查找不存在的数据
在 SQL 中,可能需要比较两个表并识别一个表中存在的数据但不是另一个。在检查丢失的记录时,通常会遇到这种情况。
请考虑以下表格:
TABLE1
id | name | address |
---|---|---|
1 | mm | 123 |
2 | nn | 143 |
TABLE2
name | age |
---|---|
mm | 6 |
oo | 9 |
目标是找到通过将 TABLE1 与 TABLE2 进行比较,找出 TABLE1 中不存在的名称。在这种情况下,TABLE1 中名为“nn”的第二行在 TABLE2 中不存在。
使用 INNER JOIN 的初始尝试:
SELECT w.* FROM TABLE1 w INNER JOIN TABLE2 v ON w.name <> v.name
将无法检索所需的内容结果是因为 INNER JOIN 只返回两个表中都匹配的行。
解决方案在于使用 LEFT JOIN相反:
SELECT w.* FROM TABLE1 w LEFT JOIN TABLE2 v ON w.name = v.name WHERE ISNULL(v.name);
LEFT JOIN 执行外连接,这意味着它将返回左表 (TABLE1) 中的所有行,无论右表 (TABLE2) 中是否有匹配的行。 ISNULL(v.name) 条件检查 TABLE1 中的行,其中 TABLE2 中相应的名称字段为空,表明该名称在 TABLE2 中不存在。
输出将为:
id | name | address |
---|---|---|
2 | nn | 143 |
此查询成功从 TABLE1 中检索名称不存在的“nn”行。
以上是SQL 中的 LEFT JOIN 如何识别一个表中存在的数据而不是另一个表中的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!