我正在研究以下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表中添加记录的学生列表。
答案 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