2016-10-05 9 views
0

2つのテーブルがあります。元の値を含む1番目のテーブル、2番目のテーブルには変更された値が含まれます。変更はわずかな列でのみ発生する可能性があります。異なるテーブルの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

「*クエリの出力は*変更が発生した列のみを含める必要があります」 - クエリは行ごとに同じ数の列を返す必要があるので、これは不可能です。 2つの異なる行が異なる列で異なる場合はどうなりますか? –

+0

そうかもしれません。私は2つのテーブルで同じ行を解析することができるはずです。変更はどの列でも起こり得ます。出力では列のみを反映する必要があります。 – Search

+0

:異なる行の異なる結果を返すことはできません。 –

答えて

1

あなたは、そのフォーマを取得することはできませんこれはSQLでは不可能です:すべての行は同じ数の列を持たなければなりません。

ただし(あなたがそれを使用する前にinstalledでなければなりません)hstore拡張子を使用してこれを行うことができます。

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

関連する問題