在SQL语句中,不需要引用表格就可以选择常量是完全合法的:
SELECT 1, 2, 3
后一个返回的结果集是包含值的单行。我想知道是否有一种方法可以使用常量表达式同时选择多行,类似于:
SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))
我希望得到像上面的结果,该结果应该能够工作并返回一个3行3列的结果集。在SQL语句中,不需要引用表格就可以选择常量是完全合法的:
SELECT 1, 2, 3
后一个返回的结果集是包含值的单行。我想知道是否有一种方法可以使用常量表达式同时选择多行,类似于:
SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))
我希望得到像上面的结果,该结果应该能够工作并返回一个3行3列的结果集。SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9
AS
为第一个SELECT
语句中的列指定别名。 - SledSELECT
语句后面添加FROM dual
,并在可能存在的UNION ALL
之前添加values
,则可以完美地在Oracle APEX 5.1中创建具有静态内容的“经典报表”表格。 - VELFR在 PostgreSQL
中,您可以执行以下操作:
SELECT *
FROM (
VALUES
(1, 2),
(3, 4)
) AS q (col1, col2)
在其他系统中,只需使用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
在Oracle
、SQL Server
和PostgreSQL
中,您还可以生成任意行数的记录集(可由外部变量提供):
SELECT level
FROM dual
CONNECT BY
level <= :n
在 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
在 SQL Server
中,
SELECT l
FROM generate_series(1, $n) l
在 PostgreSQL
中。
对于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
'foo@gmail.com' AS email
,但是我收到错误消息Incorrect syntax near the keyword 'AS'
。 - Michael以下的裸 VALUES
命令在PostgreSQL中对我有效:
VALUES (1,2,3), (4,5,6), (7,8,9)
Oracle。 感谢这篇文章 PL/SQL - Use "List" Variable in Where In Clause
我编写了一个示例语句,以便轻松手动输入值(在测试应用程序时由测试人员重复使用):
WITH prods AS (
SELECT column_value AS prods_code
FROM TABLE(
sys.odcivarchar2list(
'prod1',
'prod2'
)
)
)
SELECT * FROM prods
尝试在 Oracle 中使用 connect by 子句,类似这样:
select level,level+1,level+2 from dual connect by level <=3;
关于connect by子句的更多信息,请访问此链接:由于oraclebin网站现在存在恶意软件,已删除URL。
SELECT *
FROM DUAL
CONNECT BY ROWNUM <= 9;
以下是使用MySQL请求直接创建自定义行的方法SELECT
:
SELECT ALL *
FROM (
VALUES
ROW (1, 2, 3),
ROW (4, 5, 6),
ROW (7, 8, 9)
) AS dummy (c1, c2, c3)
dummy
的表格:c1 c2 c3
-------------
1 2 3
4 5 6
7 8 9
已测试过,适用于 MySQL 8
ROW
关键字,它将适用于SQL Server:SELECT ALL * FROM ( VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)) AS dummy (c1, c2, c3);
- undefined以下是我使用一种巧妙的XML技巧在Oracle 10+中填充静态数据的方法。
create table prop
(ID NUMBER,
NAME varchar2(10),
VAL varchar2(10),
CREATED timestamp,
CONSTRAINT PK_PROP PRIMARY KEY(ID)
);
merge into Prop p
using (
select
extractValue(value(r), '/R/ID') ID,
extractValue(value(r), '/R/NAME') NAME,
extractValue(value(r), '/R/VAL') VAL
from
(select xmltype('
<ROWSET>
<R><ID>1</ID><NAME>key1</NAME><VAL>value1</VAL></R>
<R><ID>2</ID><NAME>key2</NAME><VAL>value2</VAL></R>
<R><ID>3</ID><NAME>key3</NAME><VAL>value3</VAL></R>
</ROWSET>
') xml from dual) input,
table(xmlsequence(input.xml.extract('/ROWSET/R'))) r
) p_new
on (p.ID = p_new.ID)
when not matched then
insert
(ID, NAME, VAL, CREATED)
values
( p_new.ID, p_new.NAME, p_new.VAL, SYSTIMESTAMP );
DB2的一个选项:
SELECT 101 AS C1, 102 AS C2 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 201 AS C1, 202 AS C2 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 301 AS C1, 302 AS C2 FROM SYSIBM.SYSDUMMY1