我有几个表,一个包含主要内容的表,以及一些使用子类创建的表。
这个项目在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中这样做的好方法,那就更好了。
提前致谢。
答案 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