定義として: 2 つのセットのデカルト積は、これらのセットのすべての可能なペアのセットであるため、{A,B} x {a,b} = {(A,a),(A,b),(B,a ),(B,b)}.
今、私はそのようなデカルト積をデータベーステーブルに挿入したいと思っています(各ペアを行として)。各ペアのデフォルト値をテーブルに入力することを目的としているため、この時点ではデータ、つまり 2 つのセットはデータベースに存在しません。
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";