选择在特定时期(期限)内未付款的学生

时间:2017-04-04 13:28:22

标签: sql

我有两个表:studentspayments

students包含以下列:

first_name
last_name
student_id
class_name

payments表包含以下列:

full_name
student_id
term
session
amount_paid
class_fee

每个学生的详细信息都在students表中,但只有那些已完成或部分付款的人才会进入payments表。我已经写了一个查询来选择已经付款的人。

现在的问题是如何编写一个查询,该查询将选择特定类中的那些在给定时间段(期限)内根本没有付款的查询。

1 个答案:

答案 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'
)