我有兩個表items和users。
我想創建視圖,其中包括所有者和他們的經理、董事等具體專案。
例子:
SELECTName, OwnerId, owner.FirstName, manager.FirstName
FROM items
LEFT JOIN 用戶 as owner ON owner.id = OwnerId
left JOIN users as manager ON manager.id = owner.managerId
現在有些專案是舊的,OwnerId是過時的(用戶不再存在于表中),所以LEFT JOIN回傳NULL。
在這種情況下,我想從users表中分配具體的用戶。
SELECTName, OwnerId, owner.FirstName, manager.FirstName
FROM items
LEFT JOIN users as owner
ON owner.id = OwnerId --WHEN owner is null THEN owner ON owner.id = (SELECT * FROM users WHERE Id = 123)
left JOIN users as manager ON manager.id = owner.ManagerId
這可能嗎?我想這樣做,這樣我就不必手動更新經理、主任等。
uj5u.com熱心網友回復:
你可以使用另一個LEFT JOIN添加一個默認值:
SELECT i.Name, i.OwnerId,
COALESCE(uo.FirstName, ud.FirstName) as owner_firstname,
um.FirstName as manager_firstname
FROM items i left JOIN
用戶 uo
ON uo.id = i.OwnerId LEFT join
用戶 ud
ON ud.id = 123 LEFT JOIN
用戶嗯
ON um.id = COALESCE(uo.ManagerId, ud.ManagerId)。
注釋:
- 這也是使用默認的管理器名稱。
SELECT區分了被回傳的兩個名字。- 你的表別名是好的,但是表的縮寫更容易輸入。
- 你應該修復你的資料模型,這樣你就不會有懸空的ID。 首先宣告外鍵關系。 其次,你可能想考慮 "軟 "洗掉(設定一個標志),而不是實際洗掉一條記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314838.html
標籤:
