查询sql for mysql数据库

时间:2014-11-26 16:40:36

标签: sql

您好我有这个表架构:

EMPLOYEE
Fname| Minit| Lname| Ssn| Bdate| Address| Sex| Salary| Super_ssn| Dno

查询是每位员工的员工姓名,主管姓名和员工薪水。

我的尝试是:

$SELECT Fname, Lname, Fname as SFname, Lname as SLname
FROM EMPLOYEE
$

这是错的,但我不知道。 主管是一名员工。

2 个答案:

答案 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()

Sample SQL Fiddle