如何选择填充常量的多行?

Bla*_*iev 154 sql select constants

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

SELECT 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

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

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))
Run Code Online (Sandbox Code Playgroud)

我希望像上面这样的东西工作并返回一个包含3行和3列的结果集.

Dew*_*wfy 181

SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9
Run Code Online (Sandbox Code Playgroud)

  • 我将它与 SQL Server 一起使用并且它有效,但是我必须使用“AS”在第一个“SELECT”上给出别名 (4认同)
  • 如果在每个“ SELECT”,值之后和“ UNION ALL”之前用“ FROM dual”完成,在Oracle APEX 5.1中也可以完美地创建具有静态内容的“经典报告”表。 (2认同)

Qua*_*noi 109

PostgreSQL,您可以这样做:

SELECT  *
FROM    (
        VALUES
        (1, 2),
        (3, 4)
        ) AS q (col1, col2)
Run Code Online (Sandbox Code Playgroud)

在其他系统中,只需使用UNION ALL:

SELECT  1 AS col1, 2 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle
UNION ALL
SELECT  3 AS col1, 3 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle
Run Code Online (Sandbox Code Playgroud)

Oracle,SQL ServerPostgreSQL,您还可以生成任意行数的记录集(可以使用外部变量提供):

SELECT  level
FROM    dual
CONNECT BY
        level <= :n
Run Code Online (Sandbox Code Playgroud)

Oracle,

WITH    q (l) AS
        (
        SELECT  1
        UNION ALL
        SELECT  l + 1
        FROM    q
        WHERE   l < @n
        )
SELECT  l
FROM    q
-- OPTION (MAXRECURSION 0)
-- uncomment line above if @n >= 100
Run Code Online (Sandbox Code Playgroud)

SQL Server,

SELECT  l
FROM    generate_series(1, $n) l
Run Code Online (Sandbox Code Playgroud)

PostgreSQL.


big*_*can 14

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

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

您还可以在此处查看 SQL Fiddle:http ://www.sqlfiddle.com/#!17/9eecb/34703 /0

  • 这绝对适用于 SQL Server 2010。多列也是:SELECT constants,email FROM (VALUES (1,'foo@gmail.com'), (2,'bar@gmail.com'), (3, 'baz@gmail .com')) AS MyTable(常量,电子邮件) (2认同)

Sus*_*tta 11

尝试使用oracle中的connect by子句,类似这样

select level,level+1,level+2 from dual connect by level <=3;
Run Code Online (Sandbox Code Playgroud)

有关connect by子句的更多信息,请访问以下链接:删除URL,因为oraclebin站点现在是恶意的.


Tre*_*reg 11

以下VALUES命令在PostgreSQL中为我工作:

VALUES (1,2,3), (4,5,6), (7,8,9)
Run Code Online (Sandbox Code Playgroud)


gro*_*ter 6

SELECT * 
FROM DUAL 
CONNECT BY ROWNUM <= 9;
Run Code Online (Sandbox Code Playgroud)


JCH*_*H77 6

这是直接使用 MySQL 请求创建自定义行的方法SELECT

SELECT ALL *
FROM (
    VALUES
        ROW (1, 2, 3),
        ROW (4, 5, 6),
        ROW (7, 8, 9)
) AS dummy (c1, c2, c3)
Run Code Online (Sandbox Code Playgroud)

给我们一张桌子dummy

c1   c2   c3
-------------
 1    2    3
 4    5    6
 7    8    9
Run Code Online (Sandbox Code Playgroud)

测试用MySQL 8


Pet*_*urc 5

甲骨文 感谢这篇文章PL / SQL-在“子句中的位置”中使用“列表”变量

我将示例语句放在一起,以轻松地手动输入值(在测试人员测试应用程序时可以重复使用):

WITH prods AS (
    SELECT column_value AS prods_code 
    FROM TABLE(
        sys.odcivarchar2list(
            'prod1', 
            'prod2'
        )
    )
)
SELECT * FROM prods
Run Code Online (Sandbox Code Playgroud)