我担心答案会是直接的“不”,但我想知道是否可以在 MySQL 中执行以下操作:
SELECT (title||label||name) FROM table
即选择一个列,它可能被称为title
,label
或name
,来自table
。
原因是:查询将在table
已知的地方动态生成,但是(由于我无法控制的原因)其他表中没有一致的命名约定。
我担心答案会是直接的“不”,但我想知道是否可以在 MySQL 中执行以下操作:
SELECT (title||label||name) FROM table
即选择一个列,它可能被称为title
,label
或name
,来自table
。
原因是:查询将在table
已知的地方动态生成,但是(由于我无法控制的原因)其他表中没有一致的命名约定。
我完全同意@Strawberry 的评论,即“这听起来像是一场灾难”——这是一个非常糟糕的设计策略,我强烈建议寻找替代解决方案。然而,这是一个有趣的挑战……这是我的解决方案:
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
,则不会返回任何记录。
它成功了。
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;
这里的灵感:将字符串动态转换为列名。MySQL
使用编程语言动态编写查询语句。然后使用该查询执行数据库函数。问题解决了!