[英]Joining same table multiple times
我有2個表Person a Department-每個人都有多個針對他注冊的部門。
Person
id|name|dept1|dept2|dept3
1 |Jane|100 |102 |106
Dept
id |Name
100|Accounts
...
102|HR
...
106|Admin
什么是顯示Jane記錄的最優雅的sql,如下所示:
Jane|Accounts|HR|Admin
用這個。 並按照您的命名約定進行工作,以使所有列名的唯一性與表無關。
SELECT
Person.id, Person.name, dept1.Name, dept2.Name, dept3.Name
LEFT JOIN Dept dept1 ON dept1.id = Person.dept1
LEFT JOIN Dept dept2 ON dept2.id = Person.dept2
LEFT JOIN Dept dept3 ON dept3.id = Person.dept3
這樣的事情會讓您多次連接同一張表。 您只需為每個聯接賦予不同的別名
SELECT *
FROM Person AS P
INNER JOIN Dept AS D1 ON P.dept1 = D1.id
INNER JOIN Dept AS D2 ON P.dept2 = D2.id
WHERE P.name = 'Jane'
理想情況下,假設您對架構有任何控制權,並且可以添加以下關系,則可以對Person表中的數據進行規范化,並在Person和Dept之間建立一個鏈接表,例如PersonDepartmentLinking
(或用於鏈接表命名約定的任何約定)。方式。
在這種情況下,您可以使用STUFF
Select name,
Stuff((Select distinct ', ' + cast(Name as varchar(20))
From #Dept t2
Where t2.Id = t1.Id
FOR XML PATH('')),1,1,'')
From Person t1
我知道的唯一方法是每個列的聯接。 但是,如果您要設計表,則建議您標准化數據庫。 如果人員需要額外的部門列,則需要更改表以添加人員的新屬性。
對我來說,需要3個實體:-人員-部門-person_department_assignation
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.