这是我的作业,我能够轻松获得第三名,但第四名表示与第三名相同,但也包括那些没有经理的人。我无法想出这一个,我试过案例,iif,如果那样,等我必须以错误的方式格式化它,但我找不到任何有用的书。请帮忙。
employee_id
,last_name
和phone_number
,以及其经理的姓氏和电话号码。按employee_id
对行进行排序。 (提示:表可以连接到自己。只需给每个表一个不同的别名。)SQL:
SELECT a.employee_id,
a.last_name,
a.phone_number,
b.last_name AS manger_name,
b.phone_number AS manger_phone
FROM l_employees a,
l_employees b
WHERE a.manager_id = b.employee_id
ORDER BY a.employee_id
答案 0 :(得分:0)
您正在寻找的技巧是左连接:
SELECT a.employee_id, a.last_name, a.phone_number,
b.last_name AS manger_name, b.phone_number AS manger_phone
FROM l_employees a
LEFT JOIN l_employees b ON a.manager_id = b.employee_id
ORDER BY a.employee_id
这也可以使用Oracle的隐式连接语法(请注意(+)
):
SELECT a.employee_id, a.last_name, a.phone_number,
b.last_name AS manger_name, b.phone_number AS manger_phone
FROM l_employees a, l_employees b
WHERE a.manager_id = b.employee_id (+)
ORDER BY a.employee_id
答案 1 :(得分:0)
只是为Mureinik的回答添加一点说明。这里发生的是通常只连接来自两个表的行,其中where子句中的关系为true。外连接(左连接)或(+)告诉它返回左侧表中的所有行,无论右侧表中是否匹配,但是如果匹配中在右侧的表格,继续并填写这些列。像这样的外连接是非常强大的,但有一些事情需要注意。