在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列的结果集。
当前回答
下面是一种直接用MySQL请求SELECT创建自定义行的方法:
SELECT ALL *
FROM (
VALUES
ROW (1, 2, 3),
ROW (4, 5, 6),
ROW (7, 8, 9)
) AS dummy (c1, c2, c3)
给我们一个表假人:
c1 c2 c3
-------------
1 2 3
4 5 6
7 8 9
用MySQL 8测试
其他回答
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
对于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
使用SQLite3,下面选择Go .QueryContext()
VALUES (1), (2)
返回名为“Column1”的单个未类型化列 还有两行值分别为1和2
VALUES是简单SELECT语句的特殊形式 https://www.sqlite.org/lang_select.html#simpleselect
下面是我如何使用一个简洁的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 );
merge只插入原始表中缺少的行,这很方便 如果您想重新运行插入脚本。
SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9