我有两个定义完全相同但行数不同的表。有五个字段是表的部分键(这是两个表的主键)。我想找到在一个表中但没有在另一个表中的行。我尝试按如下方式使用存在,但没有奏效。
select * from table1 where not exists (select * from table2)
这些表具有完全相同的创建语句,但行数不同。我不知道是否可以通过使用连接来找到差异。谢谢!
我有两个定义完全相同但行数不同的表。有五个字段是表的部分键(这是两个表的主键)。我想找到在一个表中但没有在另一个表中的行。我尝试按如下方式使用存在,但没有奏效。
select * from table1 where not exists (select * from table2)
这些表具有完全相同的创建语句,但行数不同。我不知道是否可以通过使用连接来找到差异。谢谢!
尝试 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
情况看起来毛茸茸的。但查询规划器知道字段已编入索引,所以它做正确的事。