繁体   English   中英

SQL从4个表生成所有组合

[英]Sql to generate all combination from 4 tables

我有3张桌子

Table1:         Table2:       Table3:     
**Users**       **Posts**     **Articles**

Name|           Title|        Title|
Raj             Post1         Article1
Sujay           Post2         Article2
Bijay           Post3         Article3
Jijay           Post4         Article4

现在,我想将它们的所有可能组合组合起来,并放入另一个表中

就像我想将其放在表中tmp_all_cobinations

Table: **tmp_all_combinations**

Name
Raj.Post1.Aticle1
Raj.Post1.Aticle2
Raj.Post1.Aticle3
Raj.Post1.Aticle4
Raj.Post2.Aticle1
...
Raj.Post3.Aticle1
....
Sujay.

....

通过这种方式

在三个表之间进行交叉INNER JOIN ,这在MySQL中可以通过执行不带ON限制的INNER JOIN来实现。

INSERT INTO tmp_all_combinations (Users, Posts, Articles)
SELECT t1.Users, t2.Posts, t3.Articles
FROM Table1 t1
INNER JOIN Table2 t2
INNER JOIN Table3 t3

如果使用的是Postgres,则可以用CROSS JOIN替换INNER JOIN CROSS JOIN以得到相同的结果。

如果tmp_all_combinations不存在,则可以创建它,并确保这些列具有与三个源表相同的类型。

解决此问题的ANSI-SQL方法是使用cross join

INSERT INTO tmp_all_combinations
SELECT      table1.name, table2.title, table3.title
FROM        table1
CROSS JOIN  table2
CROSS JOIN  table3

基本上,您需要的是一个没有任何列要联接的联接,因此它将是所有列上的所有列。 所以很简单:

select * from users, Posts, articles

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM