在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列的结果集。
当前回答
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
其他回答
这种方法可以帮助你
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表中的第一列、第二列和第三列来带来结果集的变化。
下面介绍如何使用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
;
在Oracle SQL中,您可以使用JSON_TABLE从JSON创建表:
SELECT
t.emp_name,
t.emp_age
FROM
JSON_TABLE (
'{
"employees": [{name:"Alice", age: 19}, {name: "Bob", age: 23}]
}',
'$'
COLUMNS (
NESTED PATH '$.employees[*]'
COLUMNS (
emp_name VARCHAR2(50) PATH '$.name',
emp_age NUMBER(3,0) PATH '$.age'
)
)
) t;
Oracle。 感谢这篇文章PL/SQL -在Where in子句中使用“List”变量
我把我的示例语句放在一起,以便轻松地手动输入值(测试人员在测试应用程序时重用):
WITH prods AS (
SELECT column_value AS prods_code
FROM TABLE(
sys.odcivarchar2list(
'prod1',
'prod2'
)
)
)
SELECT * FROM prods
SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9