如何检查两个有序SQL查询的结果是否匹配?

5 sql oracle

问题在于:我在表中有两列,对于每个分组,应该具有相同的顺序.在我做出这个假设之前,我想检查现有数据是否属实.

一些示例数据:

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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,如果我使用
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;
Run Code Online (Sandbox Code Playgroud)

我正在使用oracle 11g,如果这有助于答案.

Nik*_*vić 6

通过分配row_number,您可能会在同一记录中找到顺序不同.

with ordering as (
  select t.*,
         row_number() over (partition by gid
                            order by c1) order_c1,
         row_number() over (partition by gid
                            order by c2) order_c2
  from t
)
select *
  from ordering
 where order_c1 <> order_c2
Run Code Online (Sandbox Code Playgroud)