以下sql查询选择雇员名称(从雇员表中),经理的名称(从经理表中)和绩效(从评级表中)。但是,如果缺少员工的manager_id,则在输出行时根本不会列出该员工。有没有办法解决?可能涉及联接,但不太确定。在此先感谢:)
self.total_hours = sum(self.timesheet_entries.all().values_list("hours",flat=True)
答案 0 :(得分:4)
从不在FROM
子句中使用逗号。 始终使用正确的,明确的,标准 JOIN
语法。在这种情况下,您需要使用LEFT JOIN
:
SELECT e.name, m.name, r.performance
FROM employee e LEFT JOIN
manager m
ON e.manager_id = m.id LEFT JOIN
rating r
ON r.employee_id = e.id;
请注意,它还包括查询的表别名,更易于编写和阅读。
答案 1 :(得分:-1)
通过使用LEFT JOIN,尽管无法与联接表中的任何行“配对”,但您仍获得了“左”表的所有行。
SELECT
employee.name,
manager.name,
rating.performance
FROM
employee LEFT JOIN,
manager ON employee.manager_id = manager.id LEFT JOIN
rating ON empoyee.id = rating.employee_id