在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测试
其他回答
在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 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表中的第一列、第二列和第三列来带来结果集的变化。
下面的裸值命令为我在PostgreSQL工作:
VALUES (1,2,3), (4,5,6), (7,8,9)
SELECT *
FROM DUAL
CONNECT BY ROWNUM <= 9;