关于多对多关系的单一SQL查询

时间:2017-05-14 05:33:28

标签: mysql sql-server database mysqli database-design

我有一个包含少量表格的简单数据库(以及一些示例列):

游戏(gm_id,game_name,company,desc)

plateform_master (p_id,plateform_name)

plateform_details (pd_id,gm_id,p_id, release_date

有没有办法创建单个SQL查询,它将返回具有多个平台的所有游戏细节

1 个答案:

答案 0 :(得分:0)

你的问题不是很清楚。您自己指的是postscategories? 这是一个基于我理解的示例:从plateform_master中选择所有记录,并为每个记录从plateform_details获取详细信息。您可以取消注释where部分,以获取一条包含其详细信息的主记录。 (" - "表示SQL中的注释)

select
    pm.p_id
    pd.*
from plateform_master as pm
inner join plateform_details as pd on pm.p_id = pd.p_id
-- where pm.p_id = 123

抱歉,我的不好,应该是left join,而不是inner join

根据您更改的要求尝试此操作(未经测试):选择所有游戏,并为每个游戏获取它的plateform_details和plateform_master通讯员值:

select
    gm.gm_id,
    gm.game_name,
    gm.company,
    pd.release_date,
    pm.plateform_name
from game as gm
left join plateform_details as pd on pd.gm_id = gm.gm_id
left join plateform_master as pm on (pm.p_id = pd.p_id AND pd.gm_id = gm.gm_id)
-- WHERE CONDITIONS
;

感谢投票。我还想告诉你,你这里没有多对多的关系。你只有一对多。多对多意味着在另外两个之间使用中间表。