我有以下表格:
TABLE: companies c
FIELDS: id, name, description
TABLE: departments d
FIELDS: id, name, description
TABLE employees e
FIELDS: id, company_id, department_id, name
我正在尝试获取公司1的所有员工的列表,并将部门名称(d.name)输入到行的结果中。
这是我的原始查询:
SELECT e.*, c.name as company
FROM employees e, companies c
WHERE e.company_id=c.id AND e.company_id=1;
我应该在此查询中添加什么来获取部门名称(d.name)以显示在查询的每一行中?另外......在某些情况下,e.department_id可能等于0,因为没有特定公司的部门。
感谢大家的帮助!
答案 0 :(得分:3)
SELECT e.id, e.name, e.department_id, c.name, d.name
FROM employees AS e
LEFT JOIN departments AS d ON e.department_id = d.id
LEFT JOIN companies AS c ON e.company_id = c.id
WHERE e.company_id = 1;
通常,您可以按任意顺序混合匹配联接,只要您在联接中需要的任何列/表先前已加入。在这种情况下,您从两个通过员工数据相关的单独表格中填充数据,并且它们都不是相互依赖的,因此您可以按任何顺序订购两个LEFT JOIN行。
同样,通过LEFT连接,您可以从连接的“左侧”表中获取所有行(在本例中为employees表),并从右表中获取匹配的行(如果有)(公司/部门)。如果公司或部门中没有匹配的行,那么来自这些表的任何列在结果集中都将为NULL。