我想在另一个表中显示列的名称,如下所示:
select data.data1 as head.colHeader1, data.data2 as head.colHeader2 from DATA_TABLE data, HEADER_TABLE head where data.Key = header.Key and header.key = 'someUniqueKey'
上面的查询不正确 - 是否可以使用另一个表中的“动态”列名?如果是这样,正确的语法是什么?
我想在另一个表中显示列的名称,如下所示:
select data.data1 as head.colHeader1, data.data2 as head.colHeader2 from DATA_TABLE data, HEADER_TABLE head where data.Key = header.Key and header.key = 'someUniqueKey'
上面的查询不正确 - 是否可以使用另一个表中的“动态”列名?如果是这样,正确的语法是什么?
答案很简单:在 SQL 中是不可能的。列别名是常量。您必须动态创建查询以实现您想要的:
SET @column_alias1 := SELECT colHeader1 FROM HEADER_TABLE header WHERE header.key = 'someUniqueKey';
SET @column_alias2 := SELECT colHeader2 FROM HEADER_TABLE header WHERE header.key = 'someUniqueKey';
SET @query := CONCAT('select data.data1 as `', @column_alias1, '`, data.data2 AS `', @column_alias2, '` FROM DATA_TABLE data where data.Key = header.Key ');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
如评论中所述,您必须走的路线是自己设置别名,例如:
select data.data1 as 'what you want', data.data2 as 'what you want'
from DATA_TABLE data
inner join HEADER_TABLE header where data.Key = header.Key and header.key = 'someUniqueKey'
也作为一个提醒你曾经HEADER_TABLE
head
和曾经header.Key
所以我把它改成HEADER_TABLE header