我有三张table需要放在一起。
1- payments
表格:
id
member_id
year_id
notes
paid
paid_at
created_at
updated_at
2- yearly_fees
表格:
id
year
amount
created_at
updated_at
3- members
表格:
id
first_name
last_name
我想做的是显示一个名单的所有成员谁支付和没有支付在x年。
预期示例输出:
id first_name father_name notes paid year amount
1 test name test last_name test note 1 2018 3000
2 test name test last_name test note NULL NULL NULL
3 test name test last_name test note 1 2018 3000
4 test name test last_name NULL NULL NULL NULL
5 test name test last_name NULL NULL NULL NULL
这是我写的问题:
SELECT `members`.`id`, `members`.`first_name`, `members`.`last_name`,
`payments`.`notes`, `payments`.`paid`, `yearly_fees`.`year`,
`yearly_fees`.`amount` FROM `members`
LEFT JOIN payments ON payments.member_id = members.id
LEFT JOIN yearly_fees ON yearly_fees.id = payments.year_id
WHERE payments.year_id = 4
结果:
id first_name father_name notes paid year amount
1 test name test last_name test note 1 2018 3000
2 test name test last_name test note 1 2018 3000
3 test name test last_name test note 1 2018 3000
这个 WHERE
语句只输出与 payments
表,但我希望它也输出每个成员,即使其余的行结果为null。如果我移除 WHERE
声明,它的工作方式正是我想要的,但它得到了我所有的年,而不是我特别想要的。
这是一个示例输出:
id first_name father_name notes paid year amount
1 test name test last_name test note 1 2016 3000
2 test name test last_name test note 1 2015 3000
3 test name test last_name test note 1 2018 3000
4 test name test last_name test note 1 2018 3000
5 test name test last_name test note 1 2018 3000
6 test name test last_name NULL NULL NULL NULL
7 test name test last_name NULL NULL NULL NULL
提前为英语不好道歉。
1条答案
按热度按时间b4lqfgs41#
你需要把条件转移到
ON
条款:如果你觉得
JOIN
yearly_fees
首先,因为比赛应该一直在那里。然后使用LEFT JOIN
查看中是否有匹配的行payments
.