Postgresql

表列和輸入值之間的叉積

  • February 20, 2016

我似乎無法編寫SQL查詢,該查詢計算表列和一組給定輸入值之間的叉積。

類似於以下內容:

WITH {1,2} as Input
Select *
From mTable.column, Input

mTable.column包含值3and ,它4應該返回:

1,3
1,4
2,3
2,4

有什麼辦法可以做到這一點?

在其他 RDBMS(如 2008 年之前的 SQL Server - 根據 Paul 的評論)中,可能會使用 交叉連接到子查詢UNION ALL SELECT,但 Postgres 中有更方便和有效的選項。

而且您不需要 CTE。您可以使用它,但它沒有性能優勢。

  1. 提供一VALUES

VALUES計算由值表達式指定的行值或行值集。它最常用於在較大的命令中生成“常量表”,但也可以單獨使用。

SELECT t.i, m.col1
FROM   mTable m
CROSS  JOIN (VALUES (1), (2)) t(i);
  1. 提供一個數組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如果您需要結果中的排序順序,請添加。

關於行和數組語法:

引用自:https://dba.stackexchange.com/questions/129844