0

我有 2 张桌子。我想检查表 1 的列在表 2 的列中是否没有重复项。

这是搜索应该如何工作的!搜索重复行

如果没有找到重复项,我想从 table1 中获取行名。

4

2 回答 2

2

如果我猜对了,这就是你想要的。

SELECT 
    t1.name 
FROM 
    Table1 t1 
WHERE 
    t1.name 
NOT IN 
    (
        SELECT t2.name 
        FROM Table2 t2
        JOIN t1 
        ON t2.name = t1.name
    )
于 2012-12-17T18:07:40.240 回答
1

您需要指定用于“匹配”行的一列(或多列),以确定它们是否“重复”。

我将假设(没有任何架构信息)列名是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
       )

这些语句中的每一个生成的执行计划和性能可能会有所不同。对于大型集合,“反连接”模式(第一个查询)通常表现最好。

于 2012-12-17T19:54:22.033 回答