我有一个A
10行1-10 的结果集{1,2,3,4,5,6,7,8,9,10}
,B
其中10行由evens 1-20组成{2,4,6,8,10,12,14,16,18,20}
.我想找到一组中的元素,但不是两者.行中没有其他列.
我知道UNION
会有A + B
.我可以在两地的人A
,并B
用A INTERSECT B
.我能找到的所有的行A
是不是在B带A EXCEPT B
.
这让我想到如何找到A或B中的所有行,但不是两者都有,( A EXCEPT B ) UNION ( B EXCEPT A)
在sql规范中是否存在传递等价?我想要一套{1,3,5,7,9,12,14,16,18,20}
.我相信这也可以写A UNION B EXCEPT ( A INTERSECT B )
在集合理论中,为什么在一次操作中无法做到这一点(可以向不理解集合理论的人解释),是否有一个拙劣的理由?或者,它是否只是没有实现,因为它自己构建起来如此简单?或者,我不知道更好的方法吗?
我认为这必须在某个地方的SQL规范中:我知道这个东西是巨大的.
还有另一种方法可以做你想要的,使用带有WHERE子句的FULL OUTER JOIN删除两个表中出现的行.这可能比你建议的结构更有效,但你当然应该测量两者的性能.这是您可以使用的查询:
SELECT COALESCE(A.id, B.id) AS id
FROM A
FULL OUTER JOIN B
ON A.id = B.id
WHERE A.id IS NULL OR B.id IS NULL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
415 次 |
最近记录: |