Несколько соединений к первому запросу по нескольким таблицам - PullRequest
0 голосов
/ 07 января 2012

Мне всегда кажется, что меня увязли в нескольких соединениях.У меня есть эти таблицы, которые содержат номера деталей, затем описания для этих номеров деталей распределены по 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%'";

Спасибо за любой совет, который вы можете дать.

1 Ответ

1 голос
/ 07 января 2012

Причина, по которой это не работает, состоит в том, что первое левое объединение не возвращает ничего, чтобы соответствовать второму левому соединению.

Как насчет представления с описаниями для всех таблиц в большомсоюз.Это довольно уродливо, но, конечно, было бы проще сделать запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...