2015-12-08 21 views
0

我有兩個表(見下文)員工和部門。在員工表,我有列:使用自我加入

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語句顯示了每個員工的名字,姓氏和他們的經理的名字和姓氏 - 我試圖自連接無濟於事。請幫忙。謝謝!注意:我對此很新。

回答

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 

編輯:我曾在原始響應一個錯字,所以感謝弗雷德裏克追趕,我不小心把「EMPLOYEEDID」連接謂詞,現在經理ID。不過,該帖子的其餘部分仍然存在。

如果您想要顯示沒有經理的員工,則可以將「內部」連接更改爲「左側外部」連接。

我建議研究自聯接和使用它們的一些缺點,並可能將管理員工與經理關係放入不同的表中。此外,似乎還沒有將用戶標記爲經理的字段(我不知道這是否是您的應用程序的要求),這對您也可能有用 - 以防止不是某種或那種管理者的用戶在您的表中「成爲」管理人員。

希望這會有所幫助!

+0

我想你的意思是使用'INNER JOIN EMPLOYEE AS E2 ON E1.MANAGERID = E2.EMPLOYEEID'展示自己的經理的細節 –

+0

是的,完全想鍵入那。接得好。感覺就像是一個完整的dweeb,這是我打算放在第一位的。 – PSGuy

0

你也可以我在哪裏,以獲得特定僱員管理應用self joininner 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得到使用這個連接的例子和結果。

0

自連接是一個連接,其中一個表與其自身連接(也稱爲一元關係), 特別是當表具有引用其自己的PRIMARY KEY的FOREIGN KEY時。 要連接一個表格本身意味着表格的每一行都與其自身以及表格的每一行相結合。 當表引用數據本身時,我們使用自連接。

語法自加入都一樣,

SELECT a.column_name, b.column_name... 
FROM table1 a, table1 b 
WHERE a.common_filed = b.common_field;