如何为MySQL组合主键表编写'可选'WHERE子句

时间:2014-07-28 16:26:08

标签: mysql join composite-primary-key

我有两个表,staffstaff_datastaff是普通表,staff_data是类型/值复合主键表(主键是Staff_ID和Type的组合) - 因此数据样本如下所示:

+----------+--------------------+----------+
| Staff_ID | Type               | Value    |
+----------+--------------------+----------+
|        1 | Department         | IT       |
|        1 | Organisation       | BigCorp  |
|      821 | Department         | Finance  |
|        1 | NetworkUsername    | smith.j  |
+----------+--------------------+----------+

我的目标是选择所有员工及其部门的查询,如果他们没有staff_data中列出的部门,它仍会选择它们,但会将部门列为空白

以下查询仅包含在staff_data

中列出部门的员工
SELECT staff.name, staff_data.Value as Department 
FROM staff JOIN staff_data USING(Staff_ID)
WHERE staff_data.Type = ‘Department’
GROUP BY staff.Name

但是如果我不包含WHERE子句,显然我没有得到我想要的数据。如何编写将列出所有员工的查询,包括他们的部门(如果存在)?

1 个答案:

答案 0 :(得分:3)

使用外部联接:

SELECT staff.name, staff_data.Value as Department
FROM staff
LEFT OUTER JOIN staff_data
    ON staff.Staff_ID = staff_data.Staff_ID
       AND staff_data.Type = "Department"

在左外连接中,如果右表没有与约束匹配的值,则输出仍将包含左表中的行。 (来自右表的列将为null。)