Oracle SQL中的订单比较

时间:2010-12-29 16:07:50

标签: sql oracle

我有两张桌子,t1,t2。

例如: t1是这样的:

ID Ordinal
1    1
2    2
3    3
4    4

t2是这样的:

ID Ordinal
1    1
2    3
3    5
4    6

在这种情况下,当我对序数进行比较时,我想将订单作为“无变化”返回,因为如果仔细观察,那么这两个表的实际顺序不会改变。

但是在这样的场景中: t2是这样的:

ID Ordinal
1    1
2    5
3    3
4    6

我希望看到结果为 ID 2和3从T1更改。

有什么想法吗?

谢谢!

  1. 列表项

2 个答案:

答案 0 :(得分:4)

试试这个:

SELECT T2.ID
FROM (SELECT ID, ROW_NUMBER() OVER (ORDER BY Ordinal) AS rn FROM T1) T1
JOIN (SELECT ID, ROW_NUMBER() OVER (ORDER BY Ordinal) AS rn FROM T2) T2
ON T1.ID = T2.ID 
WHERE T1.rn <> T2.rn

答案 1 :(得分:0)

尝试使用以下查询:

    SELECT  a.ID, a.Ordinal, b.Ordinal
      FROM  (
                        SELECT t1.*, rownum rnm 
                            FROM t1  
                        ORDER BY Ordinal
                    )a, 
                    (
                        SELECT t2.*, rownum rnm 
                            FROM t2
                        ORDER BY Ordinal
                    )b
     WHERE  a.ID = b.ID
--   AND a.rnm <> b.rnm //This deosn't work
     AND a.Ordinal <>  b.Ordinal

修改:更新了查询以返回所需的结果集