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