在SQL语句中选择常量而不引用表是完全合法的:

SELECT 1, 2, 3

后者返回的结果集是包含值的单行。我想知道是否有一种方法可以使用常量表达式一次选择多行,类似于:

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))

我想要像上面那样工作,并返回一个3行3列的结果集。


当前回答

在MySQL中,你可以这样做:values (1,2), (3,4);

mysql> values (1,2), (3, 4);
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
2 rows in set (0.004 sec)

在MySQL 8中,也可以给列命名:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+

其他回答

下面的裸值命令为我在PostgreSQL工作:

VALUES (1,2,3), (4,5,6), (7,8,9)

在Oracle中

SELECT
  CASE
    WHEN level = 1
    THEN 'HI'
    WHEN level = 2
    THEN 'BYE'
  END TEST
FROM dual
  CONNECT BY level <= 2;

对于Microsoft SQL Server或PostgreSQL,您可能想要尝试此语法

SELECT constants FROM (VALUES ('foo@gmail.com'), ('bar@gmail.com'), ('baz@gmail.com')) AS MyTable(常量)

你也可以在这里查看一个SQL Fiddle: http://www.sqlfiddle.com/#!17/9eecb / 34703/0

SELECT * 
FROM DUAL 
CONNECT BY ROWNUM <= 9;

下面介绍如何使用DB2的XML特性来实现这一点

SELECT *
FROM
XMLTABLE ('$doc/ROWSET/ROW' PASSING XMLPARSE ( DOCUMENT '
<ROWSET>
  <ROW>
    <A val="1" /> <B val="2" /> <C val="3" />
  </ROW>
  <ROW>
    <A val="4" /> <B val="5" /> <C val="6" />
  </ROW>
  <ROW>
    <A val="7" /> <B val="8" /> <C val="9" />
  </ROW>
</ROWSET>
') AS "doc"
   COLUMNS 
      "A" INT PATH 'A/@val',
      "B" INT PATH 'B/@val',
      "C" INT PATH 'C/@val'
) 
AS X
;