即使在MYSQL LEFT JOIN中存在Join之后,如何带NULL值

时间:2018-09-04 08:42:03

标签: mysql left-join

在MySQL数据库中,我有2个表分别命名为DEPARTMENT_MASTER和DIVISION_MASTER。

DEPARTMENT_MASTER              DIVISION_MASTER
DEPT_ID | DEPT_NAME            DIVISION_ID | DIVISION_NAME | DEPT_ID
1       | HR                   1           | DIV1          | 1
2       | CLINICAL             2           | DIV2          | 1
3       | IT                   3           | DIV3          | 2

我有这个简单的SQL查询-

SELECT DM.DEPT_NAME, DV.DIVISION_NAME, DM.DEPT_ID, DV.DIVISION_ID 
FROM DEPARTMENT_MASTER DM 
LEFT JOIN DIVISION_MASTER DV ON DM.DEPT_ID = DV.DEPT_ID

因此我得到了这样的结果

DEPT_NAME | DIVISION_NAME | DEPT_ID | DIVISION_ID
HR        | DIV1          | 1       | 1
HR        | DIV2          | 1       | 2
CLINICAL  | DIV3          | 2       | 3
IT        | NULL          | 3       | NULL

有什么办法可以使我得到这样的结果吗?

DEPT_NAME | DIVISION_NAME | DEPT_ID | DIVISION_ID
HR        | NULL          | 1       | NULL
HR        | DIV1          | 1       | 1
HR        | DIV2          | 1       | 2
CLINICAL  | NULL          | 2       | NULL
CLINICAL  | DIV3          | 2       | 3
IT        | NULL          | 3       | NULL

1 个答案:

答案 0 :(得分:0)

您只需在查询中添加UNION即可返回所需的所有空值。

SELECT * FROM (
    SELECT DM.DEPT_NAME, DV.DIVISION_NAME, DM.DEPT_ID, DV.DIVISION_ID 
    FROM DEPARTMENT_MASTER DM 
    LEFT JOIN DIVISION_MASTER DV ON DM.DEPT_ID = DV.DEPT_ID
    UNION 
    SELECT DEPT_NAME, NULL, DEPT_ID, NULL
    FROM DEPARTMENT_MASTER) AS x
ORDER BY DEPT_NAME, DIVISION_NAME

但是在这种情况下,您最好使用INNER JOIN,因为UNION会为匹配行和不匹配行都添加空行。

SELECT * FROM (
    SELECT DM.DEPT_NAME, DV.DIVISION_NAME, DM.DEPT_ID, DV.DIVISION_ID 
    FROM DEPARTMENT_MASTER DM 
    INNER JOIN DIVISION_MASTER DV ON DM.DEPT_ID = DV.DEPT_ID
    UNION ALL
    SELECT DEPT_NAME, NULL, DEPT_ID, NULL
    FROM DEPARTMENT_MASTER) AS x
ORDER BY DEPT_NAME, DIVISION_NAME