根据ID从另一个表返回fieldname

时间:2015-08-19 18:41:19

标签: mysql sql

我首先要说的是,我知道这是一个糟糕的桌面设计。我无法控制设计。这是一个遗留系统,我必须写一些报告。看着工作台中来回走动的两张桌子并不理想,所以我正在寻找一种更好的方式来查看第二张桌子。

我有两张桌子。

第一张表

CustomFieldID   FieldName  
-------------   ---------  
4202            Invoice Date  
4203            Invoice Number  
Etc.  

Retruns

SELECT * FROM qcdt_jobs_customfields_181 where JobID=1;  

第二张表

JobID  CF4202      CF4203   Etc.  
------ --------    -------  -------  
1      11/18/2014  45140    Value  

返回

JobID  Invoice Date    Invoice Number  Etc.  
------ --------------  --------------  -------  
1      11/18/2014      45140           Value  

因此第二个表中的字段名称在第一个表中定义,并且该列将被命名为CustomField Number(CF ####)。

我的问题是,是否有一个查询将返回第二个表(来自第一个表)的字段名称而不是CF ####字段名称?所以它看起来像这样。

select distinct foreign_key_id 
from tablename
where event_type = 20 
and event_status = 1 
and foreign_key_id not in (
    select distinct foreign_key_id 
    from tablename 
    where event_type = 30 
    and event_status = 2
);

1 个答案:

答案 0 :(得分:1)

您必须生成动态SQL并使用PREPARE来执行它。

SELECT GROUP_CONCAT(CONCAT('CF', CustomFieldID, ' AS `', CustomFieldName, '`')) INTO fieldNames
FROM qcdt_jobs_CustomFields
WHERE projectId = 181;

PREPARE stmt FROM CONCAT('SELECT JobID, ', fieldNames, ' Etc. FROM qcdt_jobs_customfields_181 where JobID=1');
EXECUTE stmt;