我是 SQL 新手,还无法正确执行此 SQL 查询。我目前有:
SELECT * FROM tableA
LEFT OUTER JOIN tableB
ON tableA.`full_name` = tableB.`full_name`
WHERE tableB.`id` IS NULL
Run Code Online (Sandbox Code Playgroud)
两个表都有人员记录,包括姓名和地址。我需要获取 tableA 中那些人的所有记录,而不是 tableB。下图基本上是我需要的:

问题是两个人可能有相同的名字,但地址不同。所以最终,我需要获取 tableA 中所有人的记录,不包括具有重复名称和地址的重复项。
每个表都有如下列:
id,full_name,first_name,last_name,title,phone,address,city,state,postal_code
Run Code Online (Sandbox Code Playgroud)
由于您要加入两个字段,因此您的选择是 ANTI-JOIN (Friederike S 的答案) Not exists,
SELECT DISTINCT tablea.*
FROM tablea
WHERE NOT EXISTS (SELECT *
FROM tableb
WHERE tablea.`full_name` = tableb.`full_name`
AND tableA.adress = tableB.adress)
Run Code Online (Sandbox Code Playgroud)
您还可以使用not in查看(克里斯蒂安·阿默的)答案
另一个更晦涩的解决方案是使用ALL关键字。它非常类似于NOT IN
SELECT DISTINCT tablea.*
FROM tablea
WHERE
( tablea.`full_name` , tableA.address)
!= ALL (SELECT tableb.`full_name`, tableB.address
FROM tableb)
Run Code Online (Sandbox Code Playgroud)
以下查询将根据全名和地址为您提供 tableA 中不在 tableB 中的人员的所有 id:
SELECT tableA.id FROM tableA
LEFT OUTER JOIN tableB
-- people are the same if fullname and adress match
ON tableA.`full_name` = tableB.`full_name`
AND tableA.adress = tableB.adress
-- filter people that re in tableA only
WHERE tableB.`id` IS NULL
-- filter duplicates
GROUP BY tableA.id
Run Code Online (Sandbox Code Playgroud)
您可以轻松编辑此 selet 以包含您需要的 tableA 中的任何信息。
| 归档时间: |
|
| 查看次数: |
15934 次 |
| 最近记录: |