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