SQL规范是否提供了一个更好的方法来做两个集合的排他性ORing?[英] Does the SQL spec provide for a better way to do a exclusive ORing of two sets?

本文是小编为大家收集整理的关于SQL规范是否提供了一个更好的方法来做两个集合的排他性ORing?的处理方法,想解了SQL规范是否提供了一个更好的方法来做两个集合的排他性ORing?的问题怎么解决?SQL规范是否提供了一个更好的方法来做两个集合的排他性ORing?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个结果集 A,它是 10 行 1-10 {1,2,3,4,5,6,7,8,9,10},以及 B,它是 10 行,由偶数 1-20 {2,4,6,8,10,12,14,16,18,20} 组成.我想找到一组中的元素,但不是两者.行中没有其他列.

我知道 UNION 将是 A + B.我可以用 A INTERSECT B 在 A 和 B 中找到它们.我可以在 A EXCEPT B 中找到 A 中所有 not 的行.

这让我想到了一个问题,我如何找到 A 或 B 中的所有行,但不能同时找到两者,在 sql 规范中是否存在 ( A EXCEPT B ) UNION ( B EXCEPT A) 的传递等效项?我想要一套{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

本文地址:https://www.itbaoku.cn/post/1763939.html