admin

证明SQL查询的等效性

sql

您将如何证明两个查询在功能上是等效的,例如它们将始终都返回相同的结果集。


由于在执行此操作时会想到一个特定的查询,因此最终按照@dougman的建议进行操作,在有关表的约10%的行中进行比较并比较结果,以确保没有不合适的结果。


阅读 149

收藏
2021-05-10

共1个答案

admin

最好的办法是根据给定的一组输入比较两个查询输出,以查找任何差异。要说它们对于所有输入将始终返回相同的结果,实际上取决于数据。

对于Oracle,最好的方法之一(如果不是最好的话)(非常有效)在此处(Ctrl+F比较两个表的内容):
http://www.oracle.com/technetwork/issue-
archive/2005/05-jan/o15asktom-084959.html

归结为:

select c1,c2,c3, 
       count(src1) CNT1, 
       count(src2) CNT2
  from (select a.*, 
               1 src1, 
               to_number(null) src2 
          from a
        union all
        select b.*, 
               to_number(null) src1, 
               2 src2 
          from b
       )
group by c1,c2,c3
having count(src1) <> count(src2);
2021-05-10