我有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
答案 0 :(得分:1)
您无法将该信息作为不同的列获取,因为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"