三表连接 MySQL

Posted

技术标签:

【中文标题】三表连接 MySQL【英文标题】:Three Table Join 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 的推动;) 【参考方案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

以上是关于三表连接 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

三表连接之内连接

MySQL三表查询

MySQL多表查询 三表查询 连接查询的套路

mysql三表联合查询问题

mysql三表联合查询

MySql的join(连接)查询 (三表 left join 写法)