用于检查表中是否存在该值的SQL

时间:2017-03-26 18:32:55

标签: mysql sql

我正在研究以下SQL:

select *
from `STUDENTLOC` l,
    STUDENT s,
    ATTENDANCE a
where l.STUDENTID = s.ID
    and l.LOCID = 3

现在我需要确保ATTENDANCE表中不存在这些值。它有以下结构:

ID  StudentID   ScheduleID
1      6            6   
2      3            3

这是一个简单的列表,我需要显示未在ATTENDANCE表中添加记录的学生列表。

2 个答案:

答案 0 :(得分:2)

您可以使用not exists

select *
from `STUDENTLOC` l
join STUDENT s on l.STUDENTID = s.ID
where not exists (
        select 1
        from ATTENDANCE a
        where a.STUDENTID = l.STUDENTID
        )
    and l.LOCID = 3

此外,始终使用现代显式连接语法而不是基于逗号的连接语法。

答案 1 :(得分:0)

示例表学生和表格付款:

id_student  name        id  id_student datepayment
1         Lisa         1    1        2017-01-01
2                      2    1        2017-02-03
3         Asher        3    2        2017-03-05
4         Lee          4    1        2017-03-03


SELECT a.name, a.datepayment
    FROM
    (SELECT s.name, p.datepayment
        FROM
        students s
        LEFT OUTER JOIN payment p ON s.id_student = p.id_student)  AS a       
    WHERE datepayment IS NULL;

结果:

   name    datepayment
    Asher       NULL
    Lee         NULL