【问题标题】:Sql to generate all combination from 4 tablesSql从4个表中生成所有组合
【发布时间】:2016-07-30 11:17:15
【问题描述】:

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

....

这样

【问题讨论】:

  • 试试select * from users, Posts, articles
  • 嗨,Jns 谢谢你的评论,你能帮我看看选择后如何存储它
  • @RajarshiDas - 为什么将它存储在第四个表中?您正在复制数据,并且您需要在每次更改此表时重建它。最好作为查询,或者创建一个运行这个查询的视图
  • 你实际使用的是什么数据库?

标签: mysql sql postgresql sql-insert


【解决方案1】:

在三个表之间进行交叉连接,这在 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 尚不存在,您可以创建它,确保列与三个源表具有相同的类型。

【讨论】:

  • @RajarshiDas 我还可以,但在编写 SQL 查询方面没有人比 this guy 好。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    select * from users, Posts, articles
    

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2011-04-10
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多