mysql - 双连接(一个来自同一个表,一个来自不同的表)

时间:2013-09-06 22:55:58

标签: mysql sql

我有两张桌子。

“会员”表:

  

member_id,member_name,voter_id

     

1,ABC,2

     

2,Fred,0

     

(所以,弗雷德是ABC的选民。)

“结算”表:

  

billing_id,member_id,billing_expiration

     

1,1,2012

     

2013年2月1日

     

3,1,2014

     

(因此,ABC每年支付三笔款项,并在2014年前支付。)

我希望生成一个包含所有成员的列表,但附加列“expiration”显示其最高值到期时间。但是 - 这是我不知道该怎么做的部分。除了“ABC”显示“2014”作为“到期”之外,我希望“选民”成员显示与为父成员找到的相同的到期值(在这种情况下,Fred也将显示2014年,最高找到的价值)。

AC

######更新到之前的帖子

这是sql。它非常缓慢,也因为最高年份没有返回而失败。

    select member.*, corp.*, billing.billing_expires from member 


    left join member as corp          
    on (corp.voter_id = member.member_id)

    left join billing          
    on (corp.voter_id = billing.member_id)


    group by member.member_id
    order by billing.billing_expires desc 

1 个答案:

答案 0 :(得分:0)

我和sqlfiddle玩了一下并提出了这个解决方案:

select m.member_name as memb, c.member_name as corp,
  (select max(b.billing_expiration) from billing b
  where b.member_id = c.member_id
  or b.member_id = m.member_id) as expiration
from member m
left outer join member c on c.voter_id = m.member_id

但是,子选择也可能有点慢 - 取决于表格的大小......