2017-05-09 136 views
2

嗨,大家好,我有這個給定的表..在這個表中,我想要一個select查詢來替換managerid和它所關聯的員工的名字。在同一個表內選擇外鍵的命令

例如:我想輸出爲

1 | andy | sw | andy

2 | brij | sw | andy

3 | toby | SW | BRIJ

enter image description here

是否有可能同一個表內做到這一點。

+2

是有可能,你可以嘗試在同一臺 – Miller

+1

別名加入試試這個
'從tblEmployee選擇e.empid,e.empname,e.designation,m.manager爲e JOIN tblManager爲m E上.ManagerID = m.ManagerID GROUP BY e.empid,e.empname,e.designation,m.manager' –

+0

試過這個..沒有得到輸出 –

回答

3

除了@ Shakeer的答案,我發現一個更alternative.This一個是不留join..but自連接。

SELECT e.empid, e.empname, m.empname "Manager" FROM test_Emp e, test_Emp m WHERE e.managerid=m.empid; 
1

只要自己加入即可知道經理姓名。

SELECT E1.EMPNAME, E1.DESIGNATION, E2.EMPNAME AS MANAGER_NME 
FROM EMPLOYEE E1 
LEFT JOIN EMPLOYEE E2 ON E1.MANAGER_ID = E2.EMPID 
+0

只是一點修正,用E2取代EMPID。 EMPID在最後...然後它運行完美 –

+1

是..對不起,錯字錯誤@BhawnaJain –

+1

很好..從我身上得到:) –

0

當您想要從同一張表中讀取記錄時,可以使用SELF_JOIN。

例如:

表名稱:員工

領域:EMPID,EMPNAME,經理ID

現在,如果你想要得到誰是經理的位置爲Empolyees的細節,我們需要寫這樣的查詢:

select e2.EMPID,e2.EMPNAME, COALESCE(e1.EMPNAME,e2.EMPNAME,e1.EMPNAME) as Mannager 
from `employee` e1 right join `employee` e2 
on e1.empid=e2.managerid 
+0

沒有Shoukat ...請先閱讀問題..查詢等值'選擇empid ,僱員的empname .. –

+0

對不起......嘗試這一項「從employee' e1中選擇e2.EMPID,e2.EMPNAME,COALESCE(e1.EMPNAME,e2.EMPNAME,e1.EMPNAME)作爲Mannager 在e1.empid = e2.managerid「 –

1

也可以嘗試這種方式:

SELECT EMPID,EMPNAME,DESIGNATION, case when 'MANAGERID' <> EMPNAME then EMPNAME else null end as MANAGERID FROM YOURTABLE 
+0

上右鍵加入'employee' e2 得到以下錯誤:1。關鍵字'IF'2附近的語法不正確。','附近語法不正確。 –

+1

我的錯誤,我猜你正在使用MYSQL。更新了SQL的答案。 –

+0

現在它完美的工作... upvotting你的答案:) –

1

您的查詢應該是

SELECT 
    a.EMPID, 
    a.EMPNAME, 
    a.DESIGNATION, 
    (Select b.EMPNAME from Employee as b where a.MANAGERID = b.EMPID) as  
    MANAGER 
    FROM 
    Employee as a 
+1

多一種方法來解決這個問題..upvotted你回答:) –

+0

很高興它幫助...乾杯! – Mahesh

0
DECLARE @Emp table (EmpID INT,EmpName varchar(100),Designation varchar(10),MgrID INT) 

INSERT INTO @Emp(EmpID,EMpName,Designation,MgrID) 
SELECT * 
FROM (VALUES(1,'andy','sw',NULL), 
      (2,'brij','sw',1), 
      (3,'toby','sw',2) 
)v (EmpID,EMpName,Designation,MgrID) 

SELECt e.EmpID,e.EMpName,e.Designation,ISNULL(e1.EmpName,e.EmpName) AS Mgr 
FROM @Emp e 
LEFT JOIN @Emp e1 ON e.MgrID = e1.EmpID 
+0

請格式化並解釋你的回答 – Mazz

+0

我想第三個是編輯..但是這個doent產生了期望的結果......它最後顯示了額外的兩個colums ...... andy列缺失......因此, –

0
select e2.EMPID,e2.EMPNAME, COALESCE(e1.EMPNAME,e2.EMPNAME,e1.EMPNAME) as Mannager 
from `employee` e1 right join `employee` e2 
on e1.empid=e2.managerid 

輸出:.

enter image description here

輸出: enter image description here