Vit*_*lio 22 sql oracle select
有没有办法检查两个(非平凡)选择是否相同?
- 编辑 -
最初我希望两个选项之间有正式的等价,但是证明-sql-query-equivalency的答案 阻止了我.
根据我的实际需要,我可以检查两个选项的(实际)结果是否相同.
HAL*_*000 32
如果要比较查询结果,请尝试以下操作:
(select * from query1 MINUS select * from query2)
UNION ALL
(select * from query2 MINUS select * from query1)
Run Code Online (Sandbox Code Playgroud)
这将导致仅由一个查询返回的所有行.
Bog*_*dan 12
无法对HAL9000给出的答案发表评论,我想注意MINUS不是标准的SQL而且它在postgresql下不起作用所以我们需要使用EXCEPT代替
(select * from query1 EXCEPT select * from query2)
UNION ALL
(select * from query2 EXCEPT select * from query1)
Run Code Online (Sandbox Code Playgroud)
为了
(select * from query1 EXCEPT select * from query2)
UNION ALL
(select * from query2 EXCEPT select * from query1)
Run Code Online (Sandbox Code Playgroud)
我对 进行了一些试验postgres 9.4,这是我的结果。
[1] 不支持减号,因此需要EXCEPT按照@Bogdan 的说明使用
[2] Using onlyEXCEPT不考虑重复,所以必须使用EXCEPT ALL
[3]EXCEPT ALL要求结果中的列顺序在上面的查询中应该相同,QUERY1并且QUERY2应该返回相同的列顺序,或者我们必须包装查询并确保列顺序相同。(这可能发生在应用程序逻辑中)
所以我认为,如果我们牢记以上 3 点,我们可以 100% 确定对给定数据集的两个查询返回的数据完全相同。
如果我遇到更多可能失败的边缘情况,我会更新。
| 归档时间: |
|
| 查看次数: |
28820 次 |
| 最近记录: |