2016-10-05 54 views
0

的錯過匹配列我有2個表;第一個包含原始值和第二個表的表包含修改後的值。修改可能只發生在幾列中。如何比較不同表中的兩行並返回來自表

查詢輸出應該只包含發生更改的列(字段)。從用戶界面我一次只能傳遞1個繪圖代碼(PK)。

表1

Plot code| address| Owner Name| Date of pass| Status 
========================================================== 
     |   |   |    | 
1  | aaa | Abcd  | 12/02/2016 | Pending 

表2

Plot code | address| Owner Name| Date of pass| Status 
    ========================================================= 
      |   |   |    | 
    1  | aaa | efgh  | 12/02/2016 | Allotted 

輸出

Ori_OwnerName |Ori_Status| Mod_ OwnerName| Mod_Status 
=========================================================== 
Abcd   |Pending |efgh   | Allotted 
+1

「*查詢輸出應該只包含已發生變化列*」 - 這是不可能的,因爲查詢需要返回相同的列數的每一行。如果兩列不同的行在不同列中有所不同? –

+0

雅可能會發生。一次我應該能夠解析2表中的同一行。修改可以發生在任何列中,在輸出中它應該只反映那些列。 – Search

+0

再次說明:無法返回在不同行中具有不同列的結果。 –

回答

1

你不能拿到Informa公司作爲不同的列,因爲這對於SQL來說是不可能的:每行必須具有相同數量的列。

你可以做到這一點但使用hstore擴展(必須是installed之前,你可以用它):

select t1.plot_code, 
     hstore(t1) - hstore(t2) as original, 
     hstore(t2) - hstore(t1) as changed 
from t1 
    join t2 on t1.plot_code = t2.plot_code 
where t1 is distinct from t2; 

original包含修改後的列及其原始值。列changed包含修改的列及其新值。

爲了您的例子,這會返回:

plot_code | original         | changed          
----------+-------------------------------------------+------------------------------------------- 
     1 | "owner_name"=>"Abcd", "status"=>"Pending" | "owner_name"=>"efgh", "status"=>"Allotted" 
+0

謝謝。它的工作。 – Search

相關問題