2017-08-14 76 views
0

兩個版本之間的修改後的值,我有以下結構返回新表,其中行

Table1 
ID SpecificName Value Modified 
3 Drogon  73  0 
4 Viserion  44  0 
5 Rhaegal  70  0 

Table2 
ID SpecificName Value Modified 
8 Drogon  87  0 
9 Viserion  20  0 
10 Rhaegal  70  0 

我想修改修改列值,其中Table1.SpecificName == Table2.SpecificName AND Table1.Value != Table2.Value和返回類似:

Table3 
    SpecificName Value Modified 
    Drogon  87  1 
    Viserion  20  1 
    Rhaegal  70  0 

這怎麼能實現?

回答

0
select t1.SpecificName, 
     t2.Value, 
     case when t1.Value != t2.Value then 1 else 0 end as Modified 
from t1 left join t2 on t1.SpecificName = t2.SpecificName 

我們將兩個表連接起來(左連接也用於處理缺失值)。

我們引入一個基於比較原始表和已連接表的值的修改列。如果值被修改,同樣是0

+0

謝謝。閱讀時看起來很正確。我會檢查並接受它。 –

1

要達到您想要的效果,你可以使用CASE

select t2.SpecificName, t2.value, 
case when (t1.value <> t2.value) then 1 
    when (t1.value = t2.value) then 0 
    ELSE NULL 
end 
from table1 t1 
inner join table2 t2 
on t1.SpecificName = t2.SpecificName; 

內連接在只需要匹配的值假設使用。 以下是根據需要使用上述查詢生成的結果。

enter image description here

您可以查看演示here

+0

無需額外檢查CASE/WHEN中的名稱。如果t2沒有值,則內連接可能不夠。 – StanislavL

+0

@stanislavL,內部連接wasa在假定結果僅用於匹配名稱時使用。添加NAME的情況是我的不好:-) – zarruq