如何使用mysql连接3个表

时间:2010-08-24 03:24:01

标签: sql mysql

我有以下表格:

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,因为没有特定公司的部门。

感谢大家的帮助!

1 个答案:

答案 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。