2012-01-06 93 views
0

我似乎總是陷入了多個連接。我有這些包含零件號碼的表格,然後這些零件號碼的描述分佈在12個表格中(我對此無能爲力)。所以我只想選擇我需要的零件號碼,然後通過將所有12個表格與我原來的查詢結合起來,獲得它們的描述。多個連接到多個表的第一個查詢

結果是,只有第一個表的描述,電容器才能加入。其餘的都會丟失,我可以評論電容器和連接器,等等,但我只能一次一個。

有沒有辦法在SQL中做到這一點?或者我錯過了這條船。

這裏是我的代碼:

 cmd.CommandText = "WITH PARTS AS("; 
     cmd.CommandText += "SELECT *, ROW_NUMBER() OVER (ORDER BY p.PART_NUMBER) AS 'RowNumber' FROM dbo.AllParts AS p"; 
     cmd.CommandText += ")"; 
     cmd.CommandText += "SELECT * FROM PARTS as p " 
     + "INNER JOIN dbo.[Component Manufacturer Parts] AS a ON p.RowID = a.PartGUID " 
     + "INNER JOIN dbo.[Manufacturer Part Info] AS b ON a.ManufacturerGUID = b.RowID " 
     + "LEFT Join dbo.[CAPACITORS] as caps ON caps.RowID = p.RowID " 
     + "LEFT Join dbo.[Connectors] as cons ON cons.RowID = p.RowID " 
     + "LEFT Join dbo.[Crystals and Oscillators] as xtal ON xtal.RowID = p.RowID " 
     + "LEFT Join dbo.[Diodes] as dio ON dio.RowID = p.RowID " 
     + "LEFT Join dbo.[ICs] as ics ON ics.RowID = p.RowID " 
     + "LEFT Join dbo.[Inductors] as ind ON ind.RowID = p.RowID " 
     + "LEFT Join dbo.[Misc] as mis ON mis.RowID = p.RowID " 
     + "LEFT Join dbo.[Relays] as rel ON rel.RowID = p.RowID " 
     + "LEFT Join dbo.[Resistors] as res ON res.RowID = p.RowID " 
     + "LEFT Join dbo.[Switches] as swi ON swi.RowID = p.RowID " 
     + "LEFT Join dbo.[Transformers] as tra ON tra.RowID = p.RowID " 
     + "LEFT Join dbo.[Transistors] as xfrm ON xfrm.RowID = p.RowID "      
     + "WHERE RowNumber Between @low AND @high AND p.PART_NUMBER LIKE 'CT%'"; 

感謝你可以給任何意見。

+0

您是否嘗試過在select子句中明確包含想要的字段,併爲每個描述字段使用不同的別名(假設它們是相同的)? – Atonewell 2012-01-06 23:22:01

回答

1

它不工作的原因是因爲第一個左連接沒有返回任何與第二個左連接匹配的任何東西。

如何查看大聯盟中所有表格的描述。這是非常醜陋的,但它肯定會更容易查詢。

+0

非常感謝! – 2012-01-09 15:16:42