我有两个表,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中没有列出部门,它将仍然选择他们,但将Department列为空白。

以下查询仅包含在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子句,显然我不会得到想要的数据。如何编写一个查询,列出所有员工,包括其所在部门(如果存在)?

最佳答案

使用外部联接:

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"


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

关于mysql - 如何为MySQL复合主键表编写“可选” WHERE子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24999753/

10-09 06:08
查看更多