是否有可能写出右外连接,它始终是空的左边部分?

时间:2017-02-02 11:59:48

标签: sql postgresql

这是我想要的一个例子。

我们有2个表 - 用户和部门

users:
id name  d_id
1  Alice 1
2  Bob   1

departments:
id name
1  Sales
2  Support

接下来,我写通常的正确加入:

SELECT u.id, u.name, d.name AS d_name
FROM users u
RIGHT OUTER JOIN departments d ON u.d_id = d.id

它返回:

id      name        d_name
--      --------    ---------
1       Alice       Sales
2       Bob         Sales
NULL    NULL        Support

是否可以编写返回下一个结果的查询?

id      name        d_name
--      --------    ---------
1       Alice       Sales
2       Bob         Sales
NULL    NULL        Sales
NULL    NULL        Support

3 个答案:

答案 0 :(得分:6)

您似乎想要UNION ALL

SELECT u.id, u.name, d.name AS d_name
FROM users u JOIN
     departments d
     ON u.d_id = d.id
UNION ALL
SELECT NULL, NULL, d.name
FROM departments d
ORDER BY id NULLS LAST;

第一个子查询不需要外连接。

答案 1 :(得分:3)

使用UNION添加尚未列出的部门:

SELECT u.id, u.name, d.name AS d_name
FROM users u
RIGHT OUTER JOIN departments d ON u.d_id = d.id

UNION

SELECT NULL, NULL, d.name
FROM departments

答案 2 :(得分:1)

Select 
        T.id,
        T.name,
        CASE WHEN T.d_name IS NULL THEN d.name ELSE T.d_name END d_name 
from (
SELECT 
        u.id, 
        u.name, 
        d.name AS d_name,
        did
FROM Users u
    RIGHT OUTER JOIN Departments d 
ON u.did = d.id )T
    FULL OUTER JOIN  Departments d
ON T.did <> d.id