【问题标题】:Join tables, return all data from one and WHERE data from the other (if there is no data, return null)连接表,从一个返回所有数据,从另一个返回 WHERE 数据(如果没有数据,则返回 null)
【发布时间】:2017-08-24 14:59:02
【问题描述】:

我有两个表,但我在编写查询时遇到了困难。 我试过左连接

SELECT swimmer.id, pool,last_name, first_name, paid, membership.month, datePaid, membership.fee, membership.datePaid
FROM swimmer
LEFT JOIN membership 
ON  membership.swimmer_id = swimmer.id
WHERE membership.month = 'September' 
OR membership.month IS NULL;

当我使用此代码时,我想念那些为 8 月付款的人:

Pool     FirstName    LastName   DatePaid    Fee    Method
B        Sarah        Delt       null        null   null
B        Pavle        North      null        null   null
S        Daniel       Key        2018-09-01  2000   Cash

在我的主页上,我有月份的下拉菜单。我想显示当月所有付费的游泳者以及那些没有付费的游泳者,但他们的值应该为 null(除了 Pool、FirstName 和 SecondName)

游泳桌:

NameID  PoolName  FirstName  LastName
1       B         Anna       Pier
2       B         Wolf       Sedveh
3       B         Sarah      Delt
4       B         Pavle      North
5       S         Daniel     Keys

成员表:

ID  Year  Month     DatePaid    Fee   Method  SwimmerId(FK)
1   2017  August    2017-08-01  1000  Cash    1
2   2017  August    2017-08-01  2000  Cash    2
3   2017  September 2017-09-01  2000  Cash    5

最后,我需要这样的表格:

Pool     FirstName    LastName   DatePaid    Fee    Method
B        Anna         Pier       null        null   null
B        Wolf         Sedveh     null        null   null
B        Sarah        Delt       null        null   null
B        Pavle        North      null        null   null
S        Daniel       Keys       2017-09-01  2000   Cash

所以,基本上,我需要一个查询来显示所选月份(和年份)的付费会员。对于那些支付 - 返回数据,对于那些没有 - 返回 null。 我希望我解释得很好。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT swimmer.id, pool,last_name, 
           first_name, paid, membership.month, 
           datePaid, membership.fee, membership.datePaid
    FROM swimmer
    LEFT JOIN membership 
      ON  membership.swimmer_id = swimmer.id
     AND  membership.month = 'September' 
     AND  membership.year = '2017'
    

    对于LEFT JOIN

    • 如果要过滤LEFT 表,请添加WHERE 条件。
    • RIGHT 表添加ON 条件。

    【讨论】: