2009-08-07 8 views
2

私はIDと日付の2つのテーブルを持っていると私は日によって両方のテーブルを注文すると、同じ順序SQL - 二つのテーブル

例えばにないこれらのIDを見たいの行順に検索の違い のtable_1

id | date 
------------ 
A  01/01/09 
B  02/01/09 
C  03/01/09 

table_2

id | date 
------------ 
A  01/01/09 
B  03/01/09 
C  02/01/09 

と結果

B 
C 

は今、確かに私は、クエリによって順序の結果をダンプし、それらをdiffを、私は場合は思っていた可能性があります同じ結果を得るためのSQLの方法があります。

明確にする編集は、日付がテーブル間の必ずしも同じではありません、それは順番に

おかげ

答えて

3

日付がTABLE_1TABLE_2で異なる場合は、両方のテーブルにランクで参加する必要があります。例:

SQL> WITH table_1 AS (
    2  SELECT 'A' ID, DATE '2009-01-01' dt FROM dual UNION ALL 
    3  SELECT 'B', DATE '2009-01-02' FROM dual UNION ALL 
    4  SELECT 'C', DATE '2009-01-03' FROM dual 
    5 ), table_2 AS (
    6  SELECT 'A' ID, DATE '2009-01-01' dt FROM dual UNION ALL 
    7  SELECT 'C', DATE '2009-01-02' FROM dual UNION ALL 
    8  SELECT 'B', DATE '2009-01-03' FROM dual 
    9 ) 
10 SELECT t1.ID 
11 FROM (SELECT ID, row_number() over(ORDER BY dt) rn FROM table_1) t1 
12 WHERE (ID, rn) NOT IN (SELECT ID, 
13         row_number() over(ORDER BY dt) rn 
14       FROM table_2); 

ID 
-- 
B 
C 
0

を決定するためにだけあります、それは日に参加するとIDとを比較しただけの場合されているわけではないです同じ。これは、table_1がマスターシーケンスであることを前提としています。

SELECT table_1.id 
FROM 
    table_1 
INNER JOIN table_2 
    on table_1.[date] = table_2.[date] 
WHERE table_1.id <> table_2.id 
ORDER BY table_1.id 
0

ehm select id from table_1, table_2 where table_1.id = table_2.id and table_1.date <> table_2.date

+0

私はそれをしないと思います。彼らは異なる日付を持つかもしれませんが、依然として "同じ順序"であるかもしれません - それは質問者によると正しい状況です。 – Ray

+0

はい、日付はテーブル内で同じではなく、注文フィールド –