如定义:两个集合的笛卡尔积是这些集合的所有可能对的集合,所以 {A,B} x {a,b} = {(A,a),(A,b),(B,a ),(B,b)}。
现在我想将这样的笛卡尔积插入数据库表(每对作为一行)。它旨在用每对的默认值填充表,因此此时数据库中不存在数据,即两个集合。
知道如何使用 postgresql 实现这一目标吗?
编辑 :
在 Grzegorz Szpetkowski 的回答的帮助下,我能够生成一个可以实现我想要实现的查询,但它确实不是最漂亮的。假设我想插入集合 {1,2,3} 和 {'A','B','C'} 的笛卡尔积。
INSERT INTO "Test"
SELECT * FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3) P
CROSS JOIN
(SELECT 'A' UNION SELECT 'B' UNION SELECT 'C') Q
有没有更好的方法来做到这一点?
EDIT2: 接受的答案很好,但我找到了另一个版本,如果它变得更复杂,它可能是合适的:
CREATE TEMP TABLE "Numbers" (ID integer) ON COMMIT DROP;
CREATE TEMP TABLE "Chars" (Char character varying) ON COMMIT DROP;
INSERT INTO "Numbers" (ID) VALUES (1),(2),(3);
INSERT INTO "Chars" (Char) VALUES ('A'),('B'),('C');
INSERT INTO "Test"
SELECT * FROM
"Numbers"
CROSS JOIN
"Chars";