这是问题:我有一张表里面有两列,对于每个分组,这两列应该有相同的顺序。在我做出这样的假设之前,我想检查现有数据是否符合要求。
一些示例数据:
正如您所看到的,如果我使用以下语句:
我想检查整个表格,以确保按任意一列排序时,每个gid值都具有相同的结果。Oracle的MINUS无法工作,因为其不允许在子查询中使用order by。我的第一次尝试失败了,因为MINUS的限制。
一些示例数据:
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