是否可以在MYSQL中动态选择列名,其中列名是N个已知值中的1个?

时间:2013-07-10 14:08:42

标签: mysql

我担心答案是直接'不',但我想知道是否有可能在MySQL中执行以下操作:

SELECT (title||label||name) FROM table

即从title选择一列,可以称为labelnametable

原因是:查询将在table已知的情况下动态生成,但(由于我无法控制的原因),其他表中没有一致的命名约定。

2 个答案:

答案 0 :(得分:2)

我完全同意@Strawberry's comment这听起来像是制作中的灾难” - 这是非常糟糕的设计策略,我强烈建议您找一个替代解决方案然而,这是一个有趣的挑战......这是我的解决方案:

SELECT COALESCE(title,label,name) col FROM `table` NATURAL LEFT JOIN (
  SELECT NULL title, NULL label, NULL name
) t WHERE COALESCE(title,label,name) IS NOT NULL

sqlfiddle上查看。

请注意,如果记录数据为NULL,则不会返回任何记录。

答案 1 :(得分:1)

它可以解决问题。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='YOUR_TABLE_NAME' AND COLUMN_NAME IN ('name', 'label', 'title') into @colname;
SET @table = 'YOUR_TABLE_NAME';
SET @query = CONCAT('SELECT ',@colname,' FROM ', @table);

PREPARE stmt FROM @query;
EXECUTE stmt;

灵感来自:Dynamic conversion of string into column name. MySQL