GWR Asked: 2013-04-06 09:53:58 +0800 CST2013-04-06 09:53:58 +0800 CST 2013-04-06 09:53:58 +0800 CST Oracle 替代 EXISTS EXCEPT 772 我想知道对于这里发布和回答的问题,Oracle 是否有同样优雅的解决方案: 比较可以包含 NULLS 的列 - 有没有更优雅的方法? 我无法让这个解决方案(被接受的那个)在 Oracle 环境中工作。 oracle minus 1 个回答 Voted Best Answer a_horse_with_no_name 2015-06-02T13:38:18+08:002015-06-02T13:38:18+08:00 这应该是等同于公认答案的 Oracle: SELECT * FROM a a1 JOIN b b1 ON a1.id = b1.id AND EXISTS(SELECT * FROM a a2 where a2.id = a1.id MINUS SELECT * FROM b b2 where b2.id = b1.id); 我以前从未见过select a.*(即select没有FROM使用别名而不是常量值的子句),但我认为它映射到一个相关的子查询 请注意,onedaywhen 的答案在 Oracle 中也适用(替换except为 时minus): WITH a_minus_b AS ( SELECT * FROM A minus SELECT * FROM B ) SELECT * FROM a_minus_b T JOIN B ON T.ID = B.ID; SQLFiddle:http ://sqlfiddle.com/#!4/3f369/1 只是为了完整性:在标准 SQL 中,这可以写成: SELECT * FROM a JOIN b ON a.id = b.id where (a.string, a.dt, a.b, a.num) is distinct from (b.string, b.dt, b.b, b.num); 例如 Postgres 支持:http ://sqlfiddle.com/#!15/b431b/1
这应该是等同于公认答案的 Oracle:
我以前从未见过
select a.*
(即select
没有FROM
使用别名而不是常量值的子句),但我认为它映射到一个相关的子查询请注意,onedaywhen 的答案在 Oracle 中也适用(替换
except
为 时minus
):SQLFiddle:http ://sqlfiddle.com/#!4/3f369/1
只是为了完整性:在标准 SQL 中,这可以写成:
例如 Postgres 支持:http ://sqlfiddle.com/#!15/b431b/1