Как получить значение NULL даже после того, как Join присутствует в MYSQL LEFT JOIN - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 2 таблицы с именами DEPARTMENT_MASTER и DIVISION_MASTER в базе данных MySQL.

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 голосов
/ 04 сентября 2018

Вы можете просто добавить 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
...