SQL:基于列数据连接到不同的表
我的设想如下:SQL:基于列数据连接到不同的表,sql,Sql,我的设想如下: coldesc | oldvalue | newvalue ================================== Location | LOCATION A | LOCATION B Type | TYPE C | TYPE D 表:t_审计 row | colname | oldvalue | newvalue =================================== 1 | locid | 001 | 0
coldesc | oldvalue | newvalue
==================================
Location | LOCATION A | LOCATION B
Type | TYPE C | TYPE D
表:t_审计
row | colname | oldvalue | newvalue
===================================
1 | locid | 001 | 002
2 | typeid | 010 | 011
表:t_参考_审计
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_类型
typeid | loc_desc
==================
010 | TYPE C
011 | TYPE D
从上面可以看到,第一个表是我的审计日志表,第二个表是参考表。第三和第四个表是参考表。通过使用下面的简单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
希望有人能给我一些启发。谢谢。也许是这样的?(新值的逻辑相同…)
- 该逻辑仅适用于静态映射
- 我认为你混合了一些t_ref_loc/t_ref_类型的表格及其标题
where
子句中使用过时的隐式连接语法。改为使用显式的JOIN
运算符。我以前尝试过,但到目前为止,还没有想到任何方法来连接另一个表中的值。是的,除了编写存储过程或其他代码之外,简单的左连接似乎是一种可行的方法+1.对感谢您突出显示错误的字段名称。在我的实际案例中,我有30多个参考表要链接。除非我像您的示例一样硬编码case语句中的所有链接表,否则应该没有问题。谢谢你的帮助。