2010-12-29 12 views
1

Ich habe zwei Tabellen, T1, T2.Bestellvergleich in Oracle SQL

Zum Beispiel: t1 ist wie folgt:

ID Ordinal 
1 1 
2 2 
3 3 
4 4 

t2 ist wie folgt:

ID Ordinal 
1 1 
2 3 
3 5 
4 6 

In diesem Szenario, während ich den Vergleich der Ordnungs tun, ich möchte, dass die zurück Bestellung als "keine Änderung", denn wenn Sie genau hinschauen, wird die tatsächliche Reihenfolge dieser beiden Tabellen nicht geändert.

aber in einem Szenario wie folgt aus: t2 ist wie folgt:

ID Ordinal 
1 1 
2 5 
3 3 
4 6 

Ich möchte das Ergebnis als ID 2 und 3 sehen, werden von T1 geändert.

Irgendwelche Gedanken?

Danke!

  1. Liste item

Antwort

4

Try this:

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

Das hat funktioniert !!!! Vielen Dank! – Jay

0

Versuchen Sie, die Abfrage unter Verwendung von:

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: die Abfrage aktualisiert die gewünschte Ergebnismenge zurück

+0

Danke! Aber, tut mir leid, es hat nicht funktioniert ... – Jay

+0

Danke Jay, aktualisiert die Abfrage, um das korrekte Ergebnisset zurückzugeben. – Chandu

+0

Nichts für ungut, aber ich denke du hast meine Frage falsch verstanden ... könntest du meine Frage noch einmal lesen? Ich schätze deine Hilfe. – Jay