2012-01-06 101 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