我不确定这是否真的回答了您的问题,但是在PostgreSQL中
CROSSJOIN定义为:
对于来自T1和T2的行的每种可能组合(即 笛卡尔乘积
),联接表将包含一行,该行包含T1中的所有列,然后是T2中的所有列。如果表分别具有N行和M行,则联接表将具有N * M行。FROM T1交叉联接T2等效于FROM T1,T2。它也等效于FROM T1 INNER JOIN T2 ON TRUE(请参见下文)。
编辑:
一种方法是使用VALUES列表(请注意,实际上您没有顺序,可以使用use
ORDER BY子句进行一些排序):
SELECt N AS number, L AS letter FROM (VALUES (1), (2), (3)) a(N)CROSS JOIN (VALUES ('A'), ('B'), ('C')) b(L);结果:
number | letter--------+-------- 1 | A 1 | B 1 | C 2 | A 2 | B 2 | C 3 | A 3 | B 3 | C(9 rows)
顺便说一句 :
对于更多的数字,我相信使用
generate_series函数是可行的,例如:
SELECt n AS number, chr(ascii('A') + L - 1) AS letterFROM generate_series(1, 5) NCROSS JOIN generate_series(1, 5) LORDER BY N, L;结果:
number | letter--------+-------- 1 | A 1 | B 1 | C 1 | D 1 | E 2 | A 2 | B 2 | C 2 | D 2 | E 3 | A 3 | B 3 | C 3 | D 3 | E 4 | A 4 | B 4 | C 4 | D 4 | E 5 | A 5 | B 5 | C 5 | D 5 | E(25 rows)



