我有两张桌子(见下文)员工和部门。在employees表下,我有列:
SQL> describe employees
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEEID NOT NULL NUMBER(9)
FIRSTNAME NOT NULL VARCHAR2(20)
LASTNAME NOT NULL VARCHAR2(20)
CITY NOT NULL VARCHAR2(30)
STATE NOT NULL CHAR(2)
DEPTID NOT NULL NUMBER(9)
MANAGERID NUMBER(9)
由此我需要写一个sql语句,显示每个员工的姓名,姓氏,以及他们的经理的名字和姓氏 - 我试过自己加入无济于事。请帮忙。谢谢!注意:我对此非常陌生。
答案 0 :(得分:1)
这取决于您是否希望向没有经理的员工展示。这是处理自联接的基本代码:
SELECT
E1.EMPLOYEEID,
E1.FIRSTNAME,
E1.LASTNAME,
E1.DEPTID,
E2.EMPLOYEEID AS 'MANAGER_ID'
E2.FIRSTNAME AS 'MANAGER_FIRSTNAME',
E2.LASTNAME AS 'MANAGER_LASTNAME'
FROM EMPLOYEE AS E1
INNER JOIN EMPLOYEE AS E2 ON E1.EMPLOYEEID = E2.MANAGERID
编辑:我原来的回复中有一个拼写错误,所以感谢弗雷德里克抓住了我不小心把#34; EMPLOYEEDID"连接谓词,现在是MANAGERID。不过,该职位的其余部分仍然有效。
如果您想展示那些没有经理的员工,您可以更改内部"加入"左外"加入。
我建议研究自联接和使用它们的一些缺点,并可能将员工 - 经理关系的管理放在不同的表中。还有一个字段似乎没有"标记"一个用户作为管理员或不管理员(我不知道这是否是您的应用程序的要求),这对您也可能有用 - 防止那些不是某些管理人员的用户来自"成为"你桌上的经理。
希望这有帮助!
答案 1 :(得分:0)
您也可以在我应用self join
或inner join
SELECT emp.FIRSTNAME as EMPF, emp.LASTNAME as EMPL,man.FIRSTNAME as MANF, man.LASTNAME as MANL
FROM Employees as emp
INNER JOIN Employees as man on man.EMPLOYEEID = emp.MANAGER_ID
为了获得特定员工的经理。
您可以参考此 tutorial 获取使用此联接的示例和结果。
答案 2 :(得分:0)
自连接是表与自身连接的连接(也称为一元关系), 特别是当表有一个引用自己的PRIMARY KEY的FOREIGN KEY时。 连接表本身意味着表的每一行都与自身以及表的每一行结合。 当表引用数据本身时,我们使用自连接。
自连接的语法为,
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_filed = b.common_field;