【问题标题】:Single SQL query on many to many relationship多对多关系的单个 SQL 查询
【发布时间】:2017-05-14 05:33:27
【问题描述】:

我有一个简单的数据库,只有几个表(和一些示例列):

游戏(gm_id , game_name , company , desc)

plateform_master (p_id , plateform_name)

plateform_details(pd_id、gm_id、p_id、release_date

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

【问题讨论】:

  • 是的,有办法做到这一点。加入表格,使用GROUP BY将所有平台按游戏ID分组,使用COUNT(*)查看有多少平台。
  • 提示:INNER JOIN

标签: mysql database database-design


【解决方案1】:

你的问题不是很清楚。您指的是哪个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
;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多