MySQL中如何为VALUES语句子查询的列命名?
MySQL中为VALUES子查询列命名的实现方法
问题场景
在T-SQL中可直接为VALUES子查询的列指定名称,示例如下:
SELECT x.a, x.b, x.c FROM (VALUES ('PPA', 'blah', 30) , ('PPB', 'blah blah', 60) ) AS x(a, b, c)
但在MySQL中直接套用该语法会报错,且该子查询需用于包含INSERT和LEFT JOIN的复杂语句中,无法简化为无嵌套形式。
解决方案
方法一:MySQL 8.0.19及以上版本适用
从MySQL 8.0.19版本开始,支持使用ROW()构造器,并在子查询别名后直接定义列名,语法与T-SQL接近:
SELECT x.a, x.b, x.c FROM ( VALUES ROW('PPA', 'blah', 30), ROW('PPB', 'blah blah', 60) ) AS x(a, b, c)
方法二:全版本兼容写法
若使用的MySQL版本低于8.0.19,可通过UNION ALL拼接带列别名的SELECT语句实现,该写法适配所有MySQL版本:
SELECT x.a, x.b, x.c FROM ( SELECT 'PPA' AS a, 'blah' AS b, 30 AS c UNION ALL SELECT 'PPB' AS a, 'blah blah' AS b, 60 AS c ) AS x
内容的提问来源于stack exchange,提问作者Xanadu
相关产品推荐
相关产品推荐

