发布于 2015-06-01 21:38:18
这应该是相当于已接受的答案的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.*
(即没有使用别名而不是常量值的FROM
子句的select
),但我假设它映射到与之相关的子查询。
请注意,onedaywhen的答案在甲骨文中同样有效(当用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
https://dba.stackexchange.com/questions/39352
复制相似问题