Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:基于列数据连接到不同的表_Sql - Fatal编程技术网

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语句中的所有链接表,否则应该没有问题。谢谢你的帮助。