我有 2 张桌子。我想检查表 1 的列在表 2 的列中是否没有重复项。
如果没有找到重复项,我想从 table1 中获取行名。
如果我猜对了,这就是你想要的。
SELECT
t1.name
FROM
Table1 t1
WHERE
t1.name
NOT IN
(
SELECT t2.name
FROM Table2 t2
JOIN t1
ON t2.name = t1.name
)
您需要指定用于“匹配”行的一列(或多列),以确定它们是否“重复”。
我将假设(没有任何架构信息)列名是id
.
“反连接”模式通常是性能最好的选项:
SELECT a.id
FROM table1 a
LEFT
JOIN table2 b
ON a.id = b.id
WHERE b.id IS NULL
(性能取决于一大堆因素。)
您的其他选择是使用 NOT EXISTS 谓词:
SELECT a.id
FROM table1 a
WHERE NOT EXISTS
( SELECT 1
FROM table2 b
WHERE b.id = a.id
)
或者,使用 NOT IN 谓词:
SELECT a.id
FROM table1 a
WHERE a.id NOT IN
( SELECT b.id
FROM table2 b
WHERE b.id IS NOT NULL
)
这些语句中的每一个生成的执行计划和性能可能会有所不同。对于大型集合,“反连接”模式(第一个查询)通常表现最好。