我有两张桌子:
我想将考勤表中的所有数据加入检查表IF:
使用student_idis_excused = true,parent_consent = false。考勤表可能没有数据。如何在postgresql中执行此操作?
答案 0 :(得分:1)
我猜你要找的是一个结果集,即使checking
表中没有匹配的记录,也会显示来自attendance
表的记录。如果是这种情况,那么您必须使用OUTER连接:
SELECT * FROM attendance RIGHT OUTER JOIN checking
ON (attendance.student_id = checking.student_id)
WHERE is_excused AND NOT parent_consent
答案 1 :(得分:0)
试试这个:
SELECT * FROM checking c
LEFT JOIN attendance a ON c.student_id = a.student_id AND a.is_excused = "true"
WHERE c.parent_consent = "false";
这将为您提供parent_consent为false的所有检查信息,以及每当您有is_excused = true的出勤信息时。
如果您不希望在没有出席信息时检查信息,您可以执行以下操作:
SELECT * FROM checking c
INNER JOIN attendance a ON c.student_id = a.student_id
WHERE c.parent_consent = "false"
AND a.is_excused = "true";
修改强>
如果您不想加入,但要从两个表中获取所有信息,您可以这样做:
SELECT checking_id_pk,student_id,parent_consent FROM checking c
WHERE c.parent_consent = "false"
UNION
SELECT attendance_id_pk,student_id,is_excused FROM attendance a
WHERE a.is_excused = "true";
在documentation中查看有关UNION的更多信息:
UNION有效地将query2的结果附加到query1的结果 (虽然不能保证这是这个顺序 实际上返回了行)。此外,它消除了重复的行 从结果来看,与DISTINCT一样,除非UNION ALL是 使用
答案 2 :(得分:0)
SELECT * FROM checking c
LEFT JOIN attendance a ON c.student_id = a.student_id AND a.is_excused = "true"
WHERE c.parent_consent = "false"