Совсем запутался с JOIN-ами.

RSRuslan

Существует четыре таблицы: Артикулы, [Параметры артикулов], [Назначение: параметр - группа товара] и [Параметры товара][Параметры артикулов].Код = Артикулы.[Ссылка на код артикула]--------[Параметры артикулов].[Ссылка на назначение параметра товара группе товара] = [Назначение: параметр - группа товара].Код--------[Параметры товара].Код = [Назначение: параметр - группа товара].[Ссылка на параметр]теперь сам запрос:select dbo.Артикулы.Наименование,dbo.[Параметры артикулов].Значениеfrom dbo.[Артикулы] LEFT OUTER JOIN dbo.[Параметры артикулов] ON dbo.Артикулы.Код = dbo.[Параметры артикулов].[Ссылка на код артикула] INNER JOIN dbo.[Назначение: параметр - группа товара] ON dbo.[Параметры артикулов].[Ссылка на назначение параметра товара группе товара] = dbo.[Назначение: параметр - группа товара].Код AND dbo.[Назначение: параметр - группа товара].[Ссылка на параметр] in (747,757)where Артикулы.Код in (139,275) Так вот, проблема в том, что необходимо вывести артикулы, даже в том случае если в таблице параметров артикулов нету никаких записей о значениях этих артикулов. Причём, какие именно параметры мне нужны я указал в JOIN-ах (dbo.[Назначение: параметр - группа товара].[Ссылка на параметр] in (747,757)). Если пишу для двух связанных таблиц - всё отлично работает, только добавляю третью - работает лишь только в том случае когда записи о параметрах есть, если нету то не выводит ничего, а надо выводить названия артикулов, указанные в предложении WHERE а всё остальное заполнять NULL.Подсобите, люди добрые!Спасибо.
5 ответов

RSRuslan

Ну так замените INNER JOIN на LEFT OUTER!


RSRuslan

Ну так замените INNER JOIN на LEFT OUTER!
Пробовал. Выдаёт все значения данных артикулов, какие там только есть.Насколько я догадываюсь, так как здесь связь из трёх таблиц: Таблица А, Таблица B и Таблица C. Причём Таблицу А и Таблицу В связывает таблица C. И условие для LEFT OUTER приходится на таблицу C. Думаю здесь надо как-то расставить скобки или обходить какими-то подчинёнными запросами. Я сам уже теряюсь.


RSRuslan

Извините ошибся!Таблица А, Таблица B и Таблица C. Причём Таблицу А и Таблицу С связывает таблица В. И условие для LEFT OUTER приходится на таблицу C. Думаю здесь надо как-то расставить скобки или обходить какими-то подчинёнными запросами. Я сам уже теряюсь.[/quot]


RSRuslan

оно?
declare @temp1 table (id int, val varchar(<b>50</b>))
declare @temp2 table (id1 int, id2 int, val varchar(<b>50</b>))
declare @temp3 table (id int, id3 int)

insert into @temp1 values (<b>1</b>, 'a')
insert into @temp1 values (<b>2</b>, 'b')
insert into @temp1 values (<b>10</b>, 'c')

insert into @temp2 values (<b>1</b>, <b>1</b>, 'aaa')
insert into @temp2 values (<b>1</b>, <b>2</b>, 'bbb')
insert into @temp2 values (<b>1</b>, <b>11</b>, 'ccc')
insert into @temp2 values (<b>2</b>, <b>11</b>, 'ccc')
insert into @temp2 values (<b>2</b>, <b>2</b>, 'ccc')

insert into @temp3 values (<b>1</b>, <b>55</b>)
insert into @temp3 values (<b>2</b>, <b>66</b>)
insert into @temp3 values (<b>11</b>, <b>100</b>)

-- так
select temp1.val, temp2.val
from @temp2 temp2
 inner join @temp3 temp3 on
 temp2.id2 = temp3.id
 and temp3.id3 in (<b>55</b>, <b>66</b>)
 right join @temp1 temp1 on
 temp1.id = temp2.id1

-- или так...
select temp1.val, temp2.val
from @temp1 temp1
 left join @temp2 temp2
 inner join @temp3 temp3 on
 temp2.id2 = temp3.id
 and temp3.id3 in (<b>55</b>, <b>66</b>) on
 temp1.id = temp2.id1


RSRuslan

оно?Posted via ActualForum NNTP Server 1.3
Спасибо! Это помогло.