我一直都知道UNION
SQL中的运算符,但是直到最近才发现还有其他集合运算符,INTERSECT
和EXCEPT
。我还没有找到执行第四个大集合运算符的运算符,即对称差(例如的反函数INTERSECT
)。
看起来我可以通过使用类似的东西来获得所需的输出
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(假设我的优先级正确),或通过执行反全联接:
SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
但是,这两个查询看起来都很密集,特别是与其他三个基本集合操作相比。SQL中是否存在对称差异操作,而我只是在文档中找不到它?还是有在T-SQL中实现“规范”的方式?
@ypercube执行3个join或类似join的操作。我想不出任何理由比完全加入更有效率。
—
usr
@usr实际上是2个类似join的操作,而不是3个。Union All的开销要小得多。我同意这
—
ypercubeᵀᴹ
FULL JOIN
可能会更有效率。测试可以揭示最好的。当然,如果需要每个表中的更多/不同的列,则我的解决方案不容易扩展。
(a EXCEPT b) UNION ALL (b EXCEPT a);
可能会更有效率。