use*_*652 9 postgresql join set-returning-functions
我似乎无法写一个 SQL
查询来计算表列和一组给定输入值之间的叉积。
类似的东西:
WITH {1,2} as Input
Select *
From mTable.column, Input
Run Code Online (Sandbox Code Playgroud)
随着mTable.column
包含值3
和4
,它应该返回:
1,3
1,4
2,3
2,4
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
Erw*_*ter 15
在其他 RDBMS(如 2008 年之前的 SQL Server - 根据 Paul 的评论)中,可能会使用 交叉连接到子查询UNION ALL SELECT
,但 Postgres 中有更方便和有效的选项。
并且您不需要 CTE。您可以使用它,但它没有性能优势。
提供了一套具有VALUES
:
VALUES
计算由值表达式指定的行值或行值集。它最常用于在更大的命令中生成“常量表”,但它也可以单独使用。
SELECT t.i, m.col1
FROM mTable m
CROSS JOIN (VALUES (1), (2)) t(i);
Run Code Online (Sandbox Code Playgroud)提供一个数组和unnest()
2a. 使用数组构造函数:
SELECT i, m.col1
FROM mTable m
CROSS JOIN unnest (ARRAY[1,2]) i;
Run Code Online (Sandbox Code Playgroud)
2b. 使用数组文字:
SELECT i, m.col1
FROM mTable m
CROSS JOIN unnest ('{1,2}'::int[]) i;
Run Code Online (Sandbox Code Playgroud)ORDER BY i, m.col1
如果您需要结果中的排序顺序,请添加。
关于行和数组语法:
归档时间: |
|
查看次数: |
7955 次 |
最近记录: |