Postgresql
表列和輸入值之間的叉積
我似乎無法編寫
SQL
查詢,該查詢計算表列和一組給定輸入值之間的叉積。類似於以下內容:
WITH {1,2} as Input Select * From mTable.column, Input
mTable.column
包含值3
and ,它4
應該返回:1,3 1,4 2,3 2,4
有什麼辦法可以做到這一點?
在其他 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);
- 提供一個數組和
unnest()
2a。使用數組建構子:
SELECT i, m.col1 FROM mTable m CROSS JOIN unnest (ARRAY[1,2]) i;
2b。使用數組文字:
SELECT i, m.col1 FROM mTable m CROSS JOIN unnest ('{1,2}'::int[]) i;
ORDER BY i, m.col1
如果您需要結果中的排序順序,請添加。關於行和數組語法: