2016-11-17 290 views
3

在我現有的項目數據庫(MySQL)中,有兩個表Employee和EmployeeReference。MySQL更新與多個連接到同一個表的查詢

enter image description here

Employee表中具有可以是員工(或)管理器

每個管理器將有一個參考代碼和角色列它們是否指的是將被存儲在EmployeeReference表僱員。他還將在EmployeeReference表中記錄他自己的參考代碼。

現在我們要更新EmployeeReference表中的此Reference Code列,其中包含mangidager的EmployeeID而不是現有的參考代碼。

如何做到這一點更新MySQL中使用多個連接在同一個表中的查詢? 任何幫助是高度讚賞。謝謝 !

+0

發佈您的查詢。 – sagi

+0

爲什麼不將經理代碼存儲在員工類型列中?然後,經理只是一個沒有(即NULL)經理代碼 – Strawberry

回答

0

嘗試下面的查詢,以獲得預期的結果

SELECT er.* 
FROM EmployeeReference er 
LEFT JOIN Employee e 
ON UPPER(Name) LIKE SUBSTRING(er.RefCode,1,3)+'%' 
    AND e.Role = 'MNG' 
    AND e.EmpID <> er.EmpID; 

注:根據上面的查詢寫你的更新查詢

希望這會幫助你的。

1

如果我正確理解這個問題,那麼下面的查詢可以工作。它可以進一步優化。

SELECT * FROM `EmployeeReference` c INNER JOIN (SELECT a.RefCode,a.EmpId FROM `EmployeeReference` a INNER JOIN Employee b ON a.EmpID = b.EmpId WHERE b.Role = 'MNG') d ON c.RefCode = d.RefCode 

UPDATE `EmployeeReference` c INNER JOIN (SELECT a.RefCode,a.EmpId FROM `EmployeeReference` a INNER JOIN Employee b ON a.EmpID = b.EmpId WHERE b.Role = 'MNG') d ON c.RefCode = d.RefCode SET c.RefCode = d.EmpId 
+1

的員工謝謝!這就像一個魅力,但不會更新除'MNG'/'EMP'之外的角色的少數幾行,......例如,還有另一個角色'ADM',它也被'MNG'之一引用 – Technoster