not exists
:SELECT t2.*
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.column_name = t1.column_name);
针对性能问题,您需要在table1(column_name)
上创建索引。在大多数情况下,这可能是最佳的解决方案。
虽然您可以使用JOIN
和集合运算,但我发现这是表达这个特定逻辑最简单的方法。
请注意,像UNION
和MINUS
这样的集合运算可能会产生意外的副作用 - 特别是在表内和表间删除重复项。
SELECT * FROM TABLE2 T2
LEFT JOIN TABLE1 T1 on T1.KOL = T2.KOL
WHERE T1.KOL is NULL;
这种情况是“删除”所有匹配的行。因此,在结果中,您会得到右连接减去内连接。
编辑:表名错误 :) 编辑2:我认为我的方法比@Gordon Linoff更好,因为使用提示更容易。我们三种不同的方法可以通过oracle使用相同的执行计划来获得结果。但是在我的结果中,提示非常容易控制 :) 并且非常简单。