【问题标题】:MySQL join three tableMySQL连接三个表
【发布时间】:2016-05-06 13:45:09
【问题描述】:

我有三张桌子

表1

userid  name
1       A
2       B
3       C

表2

trackid     userid  track_des
1           2           123
2           3           234
3           3           345

表3

trackid     description
1               ABC
2               BCD

我想要这样的输出,其中 userid=3

userid  name    trackid     description     track_des
3       C       2           BCD             234
3       C       3           NULL            345

我正在使用 MySQL。

【问题讨论】:

  • 也许您应该解释一下您的输出(即用户 1 和 2 没有出现的原因是什么?)
  • @JoachimIsaksson 我想要 userid=1 的输出。
  • 您的示例输出是针对 userid=3,而不是 userid=1。
  • 很抱歉错字,其中 userid=3。

标签: mysql


【解决方案1】:

您的table1 看起来包含用户,您的table3 看起来包含轨道。您的table2 看起来像是一个连接表,描述了用户和轨道之间的多对多关系。似乎连接表可能包含对table3 中不存在的轨道的引用,例如。 trackid 3。要生成您在示例中显示的输出,首先选择与userid 3 对应的记录并将其连接到table2(您的多对多连接表)。接下来,您应该离开加入包含曲目的表。您需要在此处进行左连接,因为无法找到连接表中列出的某些轨道,但这些行仍应包含在输出中。剩下的唯一任务是指定要返回的列。完整的查询如下所示:

select
    u.*,
    ut.trackid,
    t.description,
    ut.track_des
from table1 as u
inner join table2 as ut
    on ut.userid = u.userid
left outer join table3 as t
    on t.trackid = ut.trackid
where u.userid = 3;

【讨论】:

    【解决方案2】:
    select
        t1.*,
        t2.trackid,
        t3.description,
        t2.track_des
    from table1 as t1
    inner join table2 as t2
        on t2.userid =t1.userid
    left join table3 as t3
        on t3.trackid = t2.trackid
    where t1.userid = 3;
    

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2012-05-02
      • 2013-07-13
      相关资源
      最近更新 更多