Sql从4个表生成所有组合

时间:2016-07-30 11:17:16

标签: mysql sql postgresql sql-insert

我有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.

....

以这种方式

3 个答案:

答案 0 :(得分:4)

在三个表之间进行交叉连接,在MySQL中可以通过执行INNER JOIN而没有ON限制来实现。

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,则可以将INNER JOIN替换为CROSS JOIN以获得相同的结果。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

基本上你需要的是一个没有任何列可以加入的连接,所以它将是所有列上的所有列。所以它只是:

select * from users, Posts, articles