比较2个表并找到非重复条目

时间:2012-12-17 18:01:08

标签: mysql

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

搜索应该如何运作! searching duplicate rows

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

2 个答案:

答案 0 :(得分: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
    )

答案 1 :(得分: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
       )

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