从 MariaDB v10.3.3 和 MySQL v8.0.19 开始,您现在可以完全做到这一点!
请参阅文档:MariaDB、MySQL
MariaDB:
WITH mylist (a) AS (VALUES (1),(2),(3))
SELECT a FROM mylist
我在这里使用了WITH,因为 MariaDB 没有为VALUES ... 提供好的列名。您可以在没有列名的联合中使用它:
SELECT 1 AS a UNION ALL VALUES (2),(3)
虽然文档似乎没有提到它,但您甚至可以将其用作顶级查询:
VALUES (1),(2),(3) ORDER BY 1 DESC
实际的列名实际上只是第一行值,所以你甚至可以这样做(虽然它不优雅,而且你可能会遇到重复的列名错误):
SELECT `4` AS a FROM (VALUES (4),(5),(6)) mylist
MySQL:
我现在没有要测试的 MySQL v8.0.19 实例,但根据文档 [编辑:使用 dbfiddle.uk 在 MySQL v8.0.23 上成功测试,请参阅评论 #2 中的链接] 这些中的任何一个都应该有效:
SELECT column_0 AS a FROM (VALUES ROW(1), ROW(2), ROW(3)) mylist
SELECT a FROM (VALUES ROW(1), ROW(2), ROW(3)) mylist(a)
与 MariaDB 不同,MySQL 提供自动列名 column_0、column_1、column_2 等,并且还支持在引用子查询时重命名子查询的所有列。
我不确定,但this dev worklog page 似乎暗示 MySQL 也已实现 [编辑:尚未实现,截至 v8.0.26] 较短语法(省略“ROW”,如 MariaDB),或者它们可能在不久的将来的某个时间点。