Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Ерунда с LEFT JOIN  помогите разобраться (число прочтений - 1640 )
Kurgan
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 04. Июня 2014
Ерунда с LEFT JOIN  помогите разобраться
04. Июня 2014 :: 13:55
Печать  
Добрый день, уважаемые.
То ли лыжи у меня не едут к концу дня, то ли не могу разобраться с элементарной вещью.
Есть один запрос с объеденением:
Код
Выбрать все
Select
Спр.ID			    [Наименование $Справочник.Тел_СобственныеСредства]
,  $Спр.Контрагент			[Владелец $Справочник.Контрагенты]
,  $Спр.РезервПодУС			[РезервПодУС $Справочник.Тел_УзелСвязи]
,  Спр.CODE			  [ИнвентарныйНомер $Строка]
,  $Спр.СерийныйНомерСтр		     [СерийныйНомерСтр $Строка]
,  $Спр.СерийныйНомер			[СерийныйНомер $Справочник.Тел_СерНомер]
,  $Спр.Стоимость			 [Стоимость $Число]
,  $Спр.ВидСС			  [ВидСС $Справочник.Тел_ВидыСС]
,  $Спр.ТипСС			  [ТипСС $Справочник.Тел_ТипыСС]
,  $ПоследнееЗначение.Тел_СобственныеСредства.МОЛ(Спр.ID, :ДатаОтчета)     [МОЛ $Справочник.ФизЛица]
,  $Спр.СрокЭксплуатации		     [СрокЭксплуатации $Число]
,  $ПоследнееЗначение.Тел_СобственныеСредства.МестоХранения(Спр.ID, :ДатаОтчета)   [МестоХранения $Справочник.Тел_УзелСвязи]
,  $ПоследнееЗначение.Тел_СобственныеСредства.СостояниеСС(Спр.ID, :ДатаОтчета)   [СостояниеСС $Справочник.Склады]
, Тел_КомплектацияСС.IDDOC [Партия  $Документ.Тел_КомплектацияСС]
, Тел_РазукомплектацияСС.IDDOC [Разукомплектация $Документ.Тел_РазукомплектацияСС]
, $Тел_КомплектацияСССтроки.Номенклатура [Комплектующее $Справочник.Номенклатура]
, $Тел_КомплектацияСССтроки.СерийныйНомер [СерийныйНомерК $Справочник.Тел_СерНомер]
, $Тел_КомплектацияСССтроки.Партия [ПартияКомплекта $Документ.Тел_ПоступлениеТМЦ]
, Номенклатура.ИнвентарныйНомер [ИнвентарныйНомерК $Строка]
, Номенклатура.Стоимость [СтоимостьК $Число]
, Номенклатура.СтавкаНДС  [СтавкаНДС $Перечисление.СтавкиНДС]
, Номенклатура.Количество [Количество $Число]
, Номенклатура.МинОстаток [МинОстаток $Число]
, Номенклатура.Единица  [Единица $Справочник.Единицы]
, Номенклатура.МОЛ   [МОЛК $Справочник.ФизЛица]
, Номенклатура.МестоХранения [МестоХраненияК $Справочник.Тел_УзелСвязи]
From
$Справочник.Тел_СобственныеСредства Спр (nolock)
LEFT OUTER JOIN $Документ.Тел_КомплектацияСС AS Тел_КомплектацияСС With (NOLOCK) ON Спр.ID = $Тел_КомплектацияСС.СобственноеСредство
LEFT OUTER  JOIN $Документ.Тел_РазукомплектацияСС AS Тел_РазукомплектацияСС With (NOLOCK) ON Спр.ID = $Тел_РазукомплектацияСС.СобственноеСредство
INNER JOIN $ДокументСтроки.Тел_КомплектацияСС AS Тел_КомплектацияСССтроки ON Тел_КомплектацияСССтроки.IDDOC = Тел_КомплектацияСС.IDDOC
LEFT OUTER JOIN (
SELECT $Тел_ПоступлениеТМЦСтроки.Номенклатура Номенклатура
 , $Тел_ПоступлениеТМЦСтроки.СтавкаНДС СтавкаНДС
 , Номенклатура.CODE ИнвентарныйНомер
 , $Номенклатура.МинОстаток МинОстаток
 , $Номенклатура.БазоваяЕдиница Единица
 , $Тел_ПоступлениеТМЦ.МОЛ МОЛ
 , $Тел_ПоступлениеТМЦ.Объект МестоХранения
 , Тел_ПоступлениеТМЦ.IDDOC СсылкаПартия
 , Sum($Тел_ПоступлениеТМЦСтроки.Количество) Количество
	  , Sum($Тел_ПоступлениеТМЦСтроки.Количество * $Тел_ПоступлениеТМЦСтроки.Цена) Стоимость
FROM $ДокументСтроки.Тел_ПоступлениеТМЦ AS Тел_ПоступлениеТМЦСтроки With (NOLOCK)
 CROSS JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
 CROSS JOIN $Документ.Тел_ПоступлениеТМЦ AS Тел_ПоступлениеТМЦ With (NOLOCK)
WHERE (Номенклатура.ISFOLDER = 2)
GROUP BY $Тел_ПоступлениеТМЦСтроки.Номенклатура
 , $Тел_ПоступлениеТМЦСтроки.СтавкаНДС
 , $Номенклатура.БазоваяЕдиница
 , $Тел_ПоступлениеТМЦ.МОЛ
 , $Номенклатура.МинОстаток
 , Номенклатура.CODE
 , Тел_ПоступлениеТМЦ.IDDOC
 , $Тел_ПоступлениеТМЦ.Объект) AS Номенклатура ON $Тел_КомплектацияСССтроки.Номенклатура = Номенклатура.Номенклатура
AND $Тел_КомплектацияСССтроки.Партия = Номенклатура.СсылкаПартия
 



Так вот, первая часть запроса по $Справочник.Тел_СобственныеСредства возвращает две строки  - сколько есть в документе.
Запрос по номенклатуре, который я левым соединением стыкую - 4-е строки. в итоге в общем результате - 4-е строки,
В чем причина? Ведь по полям объединения - номенклатуре и партии значений два??
Заранее благодарен..
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ерунда с LEFT JOIN  помогите разобраться
Ответ #1 - 04. Июня 2014 :: 14:29
Печать  
set nocount on
declare @t1 table(f1 int)
insert into @t1 values(1)
insert into @t1 values(2)

declare @t2 table(f1 int, f2 int)
insert into @t2 values(1,1)
insert into @t2 values(2,2)
insert into @t2 values(1,3)
insert into @t2 values(2,4)

select *
from @t1 t1
left join @t2 t2 on t1.f1 = t2.f1


сколько строк, по твоему, вернет select?
  

1&&2&&3
Наверх
 
IP записан
 
Kurgan
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 04. Июня 2014
Re: Ерунда с LEFT JOIN  помогите разобраться
Ответ #2 - 05. Июня 2014 :: 05:10
Печать  
Спасибо за намек, разобрался.
Чего-то переклинило вчера..
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать