您好我有这个表架构:
EMPLOYEE
Fname| Minit| Lname| Ssn| Bdate| Address| Sex| Salary| Super_ssn| Dno
查询是每位员工的员工姓名,主管姓名和员工薪水。
我的尝试是:
$SELECT Fname, Lname, Fname as SFname, Lname as SLname
FROM EMPLOYEE
$
这是错的,但我不知道。 主管是一名员工。
答案 0 :(得分:3)
假设所有员工都有一名主管
SELECT E1.Fname As "EMP Fname", E1.Lname As "EMP Lname", E2.Fname AS "SUP Fname", E2.Lname As "SUP Lname", E1.salary
FROM EMPLOYEE E1
INNER JOIN EMPLOYEE E2
ON E1.Super_ssn = E2.ssn
假设并非所有员工都有主管
SELECT E1.Fname As "EMP Fname", E1.Lname As "EMP Lname", E2.Fname AS "SUP Fname", E2.Lname As "SUP Lname", E1.salary
FROM EMPLOYEE E1
left join EMPLOYEE E2
on E1.Super_ssn = E2.ssn
第二个问题无论如何都会有效,它只考虑没有主管的员工
从评论中纠正了我的错误,感谢您找到错字
答案 1 :(得分:0)
您需要在同一张桌子上进行自我加入才能获得主管的姓名:
SELECT E1.Fname, E1.Lname, E2.Fname as SFname, E2.Lname as SLname, E1.Salary
FROM EMPLOYEE E1
LEFT JOIN EMPLOYEE E2 ON E1.Super_ssn = E2.ssn
当你要两次加入同一张桌子时,你需要给他们不同的别名。
我使用左连接将主管包括在最顶端(因为该员工没有任何super_ssn),如果所有员工都有主管,您可以省略LEFT
使其成为{ {1}}加入。
如果您希望名称是带有首字母的字符串,则可以使用INNER
函数:
concat_ws()