【问题标题】:Three Table Join MySQL三表连接 MySQL
【发布时间】:2014-02-05 15:04:07
【问题描述】:

我有三个mysql表,每个表都有一个连接唯一ID

剧集


epis_epsiode_id || epis_title

123                Test
456                Another Test

观察名单


wali_pisode_id || wali_status || wali_user_id

123               1              16

观看日志


wast_episode_id ||浪费状态 || wast_user_id

456                1              16

上面显示了两个剧集,剧集 123 添加到用户 16 观看列表中,剧集 456 记录了同一用户观看。

我需要做的是构建一个查询,该查询返回所有Episodes 以及Watch ListWatch Log 中的user_id = 16 显示每个表的状态与剧集行或否则显示null

我可以让一个表连接工作,但是当我添加另一个井时,这就是问题的原因。

我知道与此类似的其他问题,但在尝试了大多数答案后,我仍然在努力获得所需的结果。

能否有一个非常有用的帖子发布一个可以实现上述目的的查询示例?

谢谢

编辑

SELECT 
    e.*, 
    wl.wali_status,
    ws.wast_status 
FROM 
    meta_episodes e
LEFT OUTER JOIN
    app_watch_list wl
    ON wl.wali_episode_id = e.epis_episode_id
    AND wl.wali_user_id = 16
LEFT OUTER JOIN
    app_watch_status ws
    ON ws.wast_episode_id = e.epis_episode_id
    AND ws.wast_user_id = 16

期望的结果

结果


epis_episode_id || epis_title || wali_status || wast_status


123                Test          1              NULL
456                Another…      NULL           1

【问题讨论】:

  • 我没有包括一个,因为似乎没有一个按我的预期工作,我可以发布一个我正在做的例子,但我认为这对贡献者没有帮助
  • 不会也有害吧?
  • SQL JOIN 和 LEFT JOIN
  • 你可以用 UNION 来实现这种事情,w3schools.com/sql/sql_union.asp 是开始了解它们的好地方。
  • 将我的查询添加为请求,感谢@Alexander 的推动;)

标签: php mysql sql join


【解决方案1】:

这应该可行:

SELECT  E.epis_episode_id, 
        E.epis_title,
        WLI.wali_status,
        WLO.wast_status
FROM `Episodes` AS E
LEFT JOIN `Watch List` AS WLI
    ON E.epis_episode_id = WLI.wali_episode_id
    AND WLI.wali_user_id = 16
LEFT JOIN `Watch Log` AS WLO
    ON E.epis_episode_id = WLO.wast_episode_id
    AND WLO.wast_user_id = 16

【讨论】:

    【解决方案2】:
    SELECT e.*, wali_status, wast_status
    FROM meta_episodes e
    LEFT JOIN app_watch_list wl ON e.epis_epsiode_id = wl.wali_episode_id AND wali_user_id = 16
    LEFT JOIN app_watch_status ws ON e.epis_epsiode_id = ws.wast_episode_id AND wast_user_id = 16
    

    更多关于小提琴http://sqlfiddle.com/#!2/071751/13

    【讨论】:

    • 谢谢你,但这只会返回app_watch_listapp_watch_status的两个链接表中有值的结果我希望返回所有剧集
    • 然后删除WHERE wali_user_id = 16 OR wast_user_id = 16
    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2011-10-15
    • 2011-03-25
    相关资源
    最近更新 更多