2010-12-05 108 views
1

儘管出現了一些類似的問題,但我無法找到解決我的問題的解決方案。Oracle SQL在兩個表中找到具有相同模式的不同值

我有兩個表'新','舊',都有相同的架構col1,col2,col3。

兩者不一定具有相同的記錄,特別是新的記錄可能比舊的記錄更多。

現在我在找的是一個查詢返回所有記錄new.col3不同於old.col3(和new.col1等於old.col1)。 col3可以有不同的值或null。 col1不是PK,所以可能有多個具有相同col1值的記錄。

我所有在不同組合中使用minuses的嘗試都沒有導致所有更改,也沒有包含舊的以及新的col3值。我只需要/想要結果包含new.col1,new.col3所有更改的col3值,如上所述。

任何幫助,不勝感激;)

+0

如果有`col1`的重複值,你怎麼知道`col3`被改變了,或者它只是一個不同的記錄? – Gabe 2010-12-05 15:48:53

+0

應該只有一個記錄與col3集合中的每個col1相同,但是如果有更多,它們是否都返回結果集並不重要。 – Tom 2010-12-05 15:53:51

+0

更多信息:所有相同的col1指的是同一個人,並且具有不同的col2值(舊錶和新表中都相同)。關於這個查詢雖然我只對col1和col3感興趣。 – Tom 2010-12-05 16:02:14

回答

2

下會發現在NEW_TABLE這樣所有的行,存在着在OLD_TABLE至少一行與COL3不同的值。

select a.col1 
     ,a.col3 
    from new_table a 
where exists(select 'x' 
       from old_table b 
       where a.col1 = b.col1 
       and decode(a.col3, b.col3, 'same', 'diff') = 'diff' 
      ); 
0

如果不管它是什麼在col2列,你不想刪除的項目(項目是在老,但不是在新的)要在結果則可能求助:

select new.col1, new.col3 from new 
where new.col3 not in (select old.col3 from old where old.col1 = new.col1) 
相關問題