我有两个表:students
和payments
。
students
包含以下列:
first_name
last_name
student_id
class_name
payments
表包含以下列:
full_name
student_id
term
session
amount_paid
class_fee
每个学生的详细信息都在students
表中,但只有那些已完成或部分付款的人才会进入payments
表。我已经写了一个查询来选择已经付款的人。
现在的问题是如何编写一个查询,该查询将选择特定类中的那些在给定时间段(期限)内根本没有付款的查询。
答案 0 :(得分:1)
您可能正在使用JOIN
来选择已支付的人。这将起作用,因为两个表中都有匹配的行。要找到没有付款的人,您可以使用LEFT JOIN
。如果行不匹配,它会给你NULL
。
SELECT students.*
FROM students
LEFT JOIN payments ON students.student_id = payments.student_id
AND term = 'whatever'
WHERE amount_paid IS NULL
(注意:term = 'whatever'
需要在ON
子句中,而不是WHERE
)
您也可以使用子查询和NOT EXISTS
子句执行此操作。如果子查询返回零行,NOT EXISTS
将返回true。
SELECT *
FROM students
WHERE NOT EXISTS(
SELECT amount_paid
FROM payments
WHERE students.student_id = payments.student_id
AND term = 'whatever'
)