我想找到今天缺席的学生。但我有一个名为出勤的表,其中只保留了今天在场的学生。所以我必须加入学生和出勤表才能找到哪些学生缺席。现在我写了一个查询,结果数据两次。
我的查询是:
SELECT * FROM
(SELECT student_name,student_phone,class_id FROM `students` WHERE company_id=1 AND class_id=1) AS A
LEFT JOIN
(SELECT student_id,attendances.class_id,entry_at FROM `attendances` WHERE attendances.company_id=1 AND attendances.class_id=1 AND DATE(attendances.created_at)='2023-04-05')AS B
ON A.class_id=B.class_id;
学生姓名 | 学生电话 | class_id | 学生id | class_id | entry_at |
---|---|---|---|---|---|
米兹巴 | 0123224 | 1 | 001234 | 1 | 10:24:41 |
法里德 | 0125321 | 1 | 005321 | 1 | 10:24:41 |
米兹巴 | 0123224 | 1 | 001234 | 1 | 10:31:17 |
法里德 | 0125321 | 1 | 005321 | 1 | 10:31:17 |
我的预期产出
学生姓名 | 学生电话 | class_id | 学生id | class_id | entry_at |
---|---|---|---|---|---|
米兹巴 | 0123224 | 1 | 001234 | 1 | 10:24:41 |
法里德 | 0125321 | 1 | 005321 | 1 | 10:31:17 |
你能试试这个吗?
SELECT A.student_name
, A.student_phone
, A.class_id, A.student_id
FROM students AS A
LEFT JOIN attendances AS B
ON A.class_id = B.class_id
AND A.student_id = B.student_id
AND DATE(B.created_at) = '2023-04-05'
WHERE A.company_id = 1
AND A.class_id = 1
AND B.entry_at IS NULL;