我有一个管理出勤的查询。我想添加一个功能,显示谁已经支付了一个月,谁没有。它几乎奏效了。
SELECT
students.sid,
students.name,
students.day,
students.times,
students.days,
CONCAT(payments.year,'-', payments.forMonth) AS pdate
FROM students
LEFT JOIN payments
ON students.sid = payments.sid
WHERE
students.Active = 'Yes' AND
students.day LIKE 'Tue%' AND
payments.date = (SELECT date FROM payments WHERE students.sid = payments.sid AND
payments.payfor = 'tuition' ORDER BY payments.pid DESC LIMIT 1 )
主要的问题是(selectdatefrom)子查询。concat在payments子查询集中的payments.payfor限制器之前获取它从payments表获得的第一个值。所以,在下面的表片段中,我得到的是sk1条目,而不是dec的正确学费
pid sid amt payfor forMonth year date
1076 69 7000 tuition Dec 2017 2017-12-17
1074 69 4000 sk1 Sep 2017 2017-12-17
1046 69 7000 tuition Nov 2017 2017-11-23
有没有一种方法可以在concat(payments.year,'-',payments.formonth)之前或通过concat获得payments.date子查询?
2条答案
按热度按时间ghhkc1vu1#
您应该在related on子句中移动与左联接表相关的条件,否则,如果在where条件作为内部联接工作,并且不返回相关行
如果你只想要学费,你也应该过滤这个值
hec6srdp2#
好的,我知道了。我补充道
之后
在我最初的查询中。然后,一切按需运转。