MariaDBv10.3.3およびMySQLv8.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などを提供し、参照時にサブクエリのすべての列の名前変更もサポートします。
よくわかりませんが、この開発ワークログページは、MySQLが短い構文(MariaDBのように「ROW」を省略)も実装していることを示唆しているようです[編集:v8.0.26の時点ではまだ実装されていません)。近い将来、いくつかのpoiint。