我应该在课堂上回答这个问题,这对我来说很棘手(对我而言)
编写SELECT查询以输出具有其主管名称的所有员工的姓名。如果员工没有主管,主管姓名栏应包含“没有主管”的文字。
我的数据库中的主键字段是employeeid,它们提供了名称,每个学生也有一个supervisorid
此表格如下所示(对不起布局):
employeeid lastname firstname salary supervisorid
1 Stolz Ted 25000 NULL
2 Boswell Nancy 23000 1
3 Hargett Vincent 22000 1
4 Weekley Kevin 22000 3
5 Metts Geraldine 22000 2
6 McBride Jeffrey 21000 2
7 Xiong Jay 20000 3
我想知道如何在不使用案例陈述的情况下将这7个学生应用于以下内容,我可以如何处理这个陈述:
when concat(firstname,' ',lastname)='Nancy Boswell' then 'Ted Stolz'
在较大的表中,这只是一个巨大的陈述,有没有更好的方法呢?
谢谢!
编辑:
我现在试过这个:
SELECT
EMP1.employeeid as 'employee',
EMP2.supervisorid as 'manager'
FROM
employee EMP1
LEFT OUTER JOIN
employee EMP2
ON
emp1.employeeid = emp2.supervisorid;
但是,我看到重复的字段,由于某种原因,员工2和3出现两次,这意味着有9个字段显示而不是7。
另外,我需要显示他们的名字,而不是他们的ID,这是否意味着我需要加入我已经对员工姓名进行的加入?我该怎么做?
感谢您的反馈!
答案 0 :(得分:2)
您需要根据supervisorId将表与自身链接起来。如果您不熟悉SQL,这可能很奇怪,但它很常见。您告诉SQL使用主键将主管的行添加到员工的行中。
SELECT
*
FROM
EMPLOYEES EMP1
LEFT OUTER JOIN
EMPLOYEES EMP2
ON
-- make link between tables here
请注意,上述查询不是100%正确/完整,这是一个指示。 LEFT OUTER JOIN语句使没有主管的员工对主管有空值,否则整个记录将被遗漏。