MySQL合并来自多个表

时间:2016-01-22 15:10:39

标签: mysql django python-2.7

我有几个表,一个包含主要内容的表,以及一些使用子类创建的表。

这个项目在MySQL

parent_table

===========================
| id       | name         |
---------------------------    
| 1        | website 1    |
| 2        | website 2    | 
| 3        | website 3    |
===========================

child_table_1(例如烹饪网站)

=========================================================
| id       | fk   | url             | books_for_sale    |
---------------------------------------------------------    
| 1        | 1    | http://foo.com  | Cooking food      |
| 2        | 3    | http://bar.com  | Cooding bars      |
=========================================================

child_table_2(例如游戏网站)

========================================================
| id       | fk   |url             | games_for_sale    |
--------------------------------------------------   
| 1        | 2    |http://dad.com  | Daddy Daycare     |
========================================================

现在我需要将所有表中的信息合并为一个。

========================================================================
| id       | fk   |url             | books_for_sale    | games_for_sale|
------------------------------------------------------------------------
| 1        | 1    |http://foo.com  | Cooking food      |               |
| 2        | 2    |http://dad.com  |                   | Daddy Daycare |
| 3        | 3    |http://bar.com  | Cooding bars      |               |  
========================================================================

我试过了:

SELECT * FROM parent_table
LEFT JOIN child_table_1
ON parent_table.id = child_table_1.id
LEFT JOIN child_table_2
ON parent_table.id = child_table_2.id

而且:

SELECT * FROM parent_table
LEFT JOIN child_table_1
ON parent_table.id = child_table_1.id
LEFT JOIN child_table_2
ON child_table_1.id = child_table_2.id

但他们根本没有工作 我得到的只是联接中最后一个表格中的内容。

在实际案例中,我有大约十几个表,我需要使用不同的列。

我希望有人可以帮助我。 如果有人知道在Django中这样做的好方法,那就更好了。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用每个表的主键来连接表,而不是您应该使用外键,这样您就可以拥有一对多的关系。

id列标识该特定表的每一行,您需要在urls表中充当外键的websiteid列,这样您就可以将外键与主键匹配。

从table1中选择* 在table2.fkid = table1.id

上加入table2

可能有效的另一个选项是union

SELECT * FROM parent_table LEFT JOIN child_table_1 ON parent_table.id = child_table_1.fkid UNION ALL SELECT * FROM parent_table LEFT JOIN child_table_2 ON parent_table.id = child_table_2.fkid

此外,您必须确保两个select语句包含相同的列

答案 1 :(得分:0)

完全生成问题表的解决方案(组合JOIN和UNION,对缺少的列使用NULL作为X)

SELECT parent_table.id as id,fk,url,books_for_sale,NULL as games_for_sale
FROM parent_table JOIN child_table_1 ON parent_table.id = child_table_1.fk
UNION
SELECT parent_table.id as id,fk,url,NULL as books_for_sale,games_for_sale
FROM parent_table JOIN child_table_2 ON parent_table.id = child_table_2.fk
ORDER BY id