我的情况如下:
表:t_audit
row | colname | oldvalue | newvalue
===================================
1 | locid | 001 | 002
2 | typeid | 010 | 011
表:t_ref_audit
colname | desc | link_table | link_key | link_desc
===========================================================
locid | Location | t_ref_loc | locid | loc_desc
typeid | Type | t_ref_type | typeid | type_desc
表:t_ref_loc
locid | type_desc
==================
001 | LOCATION A
002 | LOCATION B
表:t_ref_type
typeid | loc_desc
==================
010 | TYPE C
011 | TYPE D
从上面可以看出,第一个表是我的审计日志表,第二个表是参考表。第3和第4表是参考表。通过使用下面的简单SQL,我可以基于t_ref_audit表获得对列名的正确描述。
SELECT t_ref_audit.desc, t_audit.oldvalue, t_audit.newvalue
FROM t_audit, t_ref_audit
WHERE t_audit.colname = t_ref_audit.colname
我现在的问题是,t_audit.oldvalue和t_audit.newvalue上的列包含来自其他参考表(t_ref_loc& t_ref_type)的参考代码ID。我想根据t_ref_audit.link_desc中的列显示正确的描述,而不仅仅是ID,如下所示:
coldesc | oldvalue | newvalue
==================================
Location | LOCATION A | LOCATION B
Type | TYPE C | TYPE D
希望有人可以就此启发我。谢谢。
答案 0 :(得分:1)
也许是这样的? (和newvalues的逻辑相同......)
SELECT
t_ref_audit.desc,
t_audit.oldvalue,
t_audit.newvalue,
case
when link_table='t_ref_loc' then t_ref_loc.loc_desc
when link_table='t_ref_type' then t_ref_type.type_desc
else '???'
end oldvalue_desc
FROM
t_audit
join t_ref_audit ON t_audit.colname = t_ref_audit.colname
left join t_ref_loc on link_table='t_ref_loc' and oldvalue=locid
left join t_ref_type on link_table='t_ref_type' and oldvalue=typeid