0

我有两个定义完全相同但行数不同的表。有五个字段是表的部分键(这是两个表的主键)。我想找到在一个表中但没有在另一个表中的行。我尝试按如下方式使用存在,但没有奏效。

select * from table1 where not exists (select * from table2)

这些表具有完全相同的创建语句,但行数不同。我不知道是否可以通过使用连接来找到差异。谢谢!

4

1 回答 1

1

尝试 LEFT JOIN ... IS NULL 模式。

SELECT a.* 
  FROM table1 a
  LEFT JOIN tableb b 
        ON a.f1 = b.f1 
       AND a.f2 = b.f2
       AND a.f3 = b.f3
       AND a.f4 = b.f4
       AND a.f5 = b.f5
 WHERE b.f1 IS NULL

这是因为 LEFT JOIN 在 中找不到匹配的行时b,会从其结果集中返回数据a,但会为 中的值返回 NULL b

ON情况看起来毛茸茸的。但查询规划器知道字段已编入索引,所以它做正确的事。

于 2018-09-21T18:46:18.020 回答