在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列的结果集。
当前回答
对于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
其他回答
试试oracle中的connect by子句,就像这样
select level,level+1,level+2 from dual connect by level <=3;
有关connect by子句的更多信息,请参见此链接:已删除URL,因为oraclebin站点现在是恶意的。
在Oracle中
SELECT
CASE
WHEN level = 1
THEN 'HI'
WHEN level = 2
THEN 'BYE'
END TEST
FROM dual
CONNECT BY level <= 2;
下面是我如何使用一个简洁的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只插入原始表中缺少的行,这很方便 如果您想重新运行插入脚本。
下面的裸值命令为我在PostgreSQL工作:
VALUES (1,2,3), (4,5,6), (7,8,9)
这种方法可以帮助你
SELECT TOP 3
1 AS First,
2 AS Second,
3 AS Third
FROM Any_Table_In_Your_DataBase
Any_Table_In_Your_DataBase:任何包含超过3条记录的表,或者使用任何系统表。这里我们不关心该表的数据。
您可以通过连接Any_Table_In_Your_DataBase表中的第一列、第二列和第三列来带来结果集的变化。