2010-12-29 3 views
1

J'ai deux tables, t1, t2.Comparaison d'ordres dans Oracle SQL

Par exemple: t1 est comme ceci:

ID Ordinal 
1 1 
2 2 
3 3 
4 4 

t2 est comme ceci:

ID Ordinal 
1 1 
2 3 
3 5 
4 6 

Dans ce scénario, alors que je fais la comparaison de l'ordinal, je veux revenir le commandez comme "pas de changement", car si vous regardez attentivement, l'ordre réel de ces deux tables ne sont pas modifiés.

mais dans un scénario comme celui-ci: t2 est comme ceci:

ID Ordinal 
1 1 
2 5 
3 3 
4 6 

Je voudrais voir le résultat que ID 2 et 3 sont modifiés de T1.

Des pensées?

Merci!

  1. Liste item

Répondre

4

Essayez ceci:

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 
+0

Cela a fonctionné !!!! Merci! – Jay

0

Essayez d'utiliser la requête suivante:

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 

Edit: mis à jour la requête pour renvoyer le jeu de résultats requis

+0

Merci! Mais, désolé, cela n'a pas fonctionné ... – Jay

+0

Merci Jay, mis à jour la requête pour retourner le jeu de résultats correct. – Chandu

+0

Sans vouloir vous offenser, mais je pense que vous avez mal compris ma question ... pourriez-vous relire ma question une fois de plus? J'apprécie votre aide. – Jay