栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PostgreSQL:插入两个或两个以上集合的笛卡尔积

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PostgreSQL:插入两个或两个以上集合的笛卡尔积

我不确定这是否真的回答了您的问题,但是在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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号