Sql-Server
mssql - 使用來自同一表和關聯表的結果進行查詢
我需要查詢幫助。
我有 3 張桌子:
- “零件”表。
這裡需要注意的一件重要事情是,parts 表包含主要部分和子部分。子零件是主要零件的組件。子元件使用列“MainPartId”連結到主元件
這是桌子
說明:
a)“變速器01”(Id值為1)和“電機01”(Id值為5)是主要元件。主要部分的“mainPartId”值始終為 0。CTypeId 為 1010
b) 2,3,4 行是“傳輸 01”的子部分,因此 MainPartId 為“1”(“傳輸 01”的 ID)。同樣,6 是“motor 01”的子部分
c) CType Id 不會針對給定的主要部分重複。即:從上表中,您將看到“齒輪 4324”具有 CTypeId od“441”。對於“傳輸 01”的任何子部分,這不會重複。但另一個主要部分 - 如“電機 01” - 可以有 CtypeId 為“441”的子部分,如表所示
“設備”表
“EquipmentPartAssoc”表
這是一個包含設備元件關聯的表
關於查詢和預期結果:
我想要的結果是列出所有 mainpart - childpart 組合以及每個設備的特定 CTypeId。
例如(如果我想要 CtypeId 441 和供應商 v1 的結果)
補充筆記:
- 我們不查詢 CTypeId 1010,所以不需要考慮這種情況
- 在這種情況下,表中只給出了 1 個供應商“V1”。但我希望你明白可以有很多供應商。
使用inner join,從
Parts
表開始,self join 獲取Parent的資訊。select e.EquipmentNumber, p.PartNumber, ChildPartNumber = c.PartNumber, c.CTypeId, c.VendorId from Parts c -- child inner join Parts p on c.MainPartId = p.Id -- parent inner join EquipmentPartAssoc a on p.Id = a.PartId inner join Equipment e on e.Id = a.EquipmentId where c.CTypeId = 441 and c.VendorId = 'V1'
結果 :