这是问题:我有一个表中的两列,对于每个分组,应该具有相同的顺序。在进行这种假设之前,我想检查一下现有数据是否属实。如何检查两个有序SQL查询的结果是否匹配?
一些示例数据:
gid c1 c2
1 1 5
1 2 7
2 1 22
2 2 38
2 3 40
3 1 4
3 2 8
3 3 2
正如你可以看到,如果我使用
select * from table t where t.gid = 1 order by c1
的结果将是相同的,相同责令
select * from table t where t.gid = 1 order by c2
。
结果也将匹配为gid = 2. 但是,如果我要做同样的gid = 3,顺序将不再匹配。因为在这种情况下,订购c2
与订购c1
有不同的结果。
我想检查整个表格,以确保这些列的排序对每个gid
的值都有相同的结果。 Oracle的MINUS
将不起作用,因为它不允许在子查询中使用order by
。我的第一次尝试,它不因MINUS
局限性的工作,就是:
select gid, c1, c2 from table order by gid, c1, c2
minus
select gid, c1, c2 from table order by gid, c2, c1;
我使用Oracle 11g如果有了答案帮助。
'minus'不起作用,因为它只是隐式的'distinct',因为你只关心一个集合是否存在于另一个集合中。 – Ben