Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Возможна ли такая выборка одним запросом? (число прочтений - 7363 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможна ли такая выборка одним запросом?
Ответ #30 - 30. Ноября 2011 :: 17:32
Печать  
Код
Выбрать все
ТекстЗапроса = "
  |SELECT
  |	Д.Бригада	[Бригада $Справочник.БригадыСборщиков]
  |FROM
  |(Select
  |	$СпрД.Бригада Бригада,$СпрД.Серия from
  |	$Справочник.БригадыСборщиковДопускиПоСериям СпрД  (NOLOCK)
  |WHERE
  |	СпрД.IsMark = 0
  |	AND $СпрД.Серия IN (SELECT Val From #ГруппаСерий)
  |GROUP BY
  | 	$СпрД.Бригада, $СпрД.Серия )Д
  |Group by Д.Бригада
  |HAVING
  |	count(Д.Бригада) = (select count(*) from  #ГруппаСерий)
  |";  

  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Возможна ли такая выборка одним запросом?
Ответ #31 - 30. Ноября 2011 :: 17:33
Печать  
Блин, работает. Тестировал по-разному.
Осталось только разобраться с запросом...
Спасибо!!!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #32 - 30. Ноября 2011 :: 17:33
Печать  
Eprst писал(а) 30. Ноября 2011 :: 17:28:
вот только inner join не нужен там вовсе.

нужен
он пропускает помеченные на удаление серии
ну и кстати не нужно такие и заносить в #ГруппаСерий
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #33 - 30. Ноября 2011 :: 17:34
Печать  
Foma писал(а) 30. Ноября 2011 :: 17:33:
Блин, работает. Тестировал по-разному.
Осталось только разобраться с запросом...
Спасибо!!!

подожди сейчас  чуть чуть улучшу
5 сек

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможна ли такая выборка одним запросом?
Ответ #34 - 30. Ноября 2011 :: 17:35
Печать  
Z1 писал(а) 30. Ноября 2011 :: 17:33:
Eprst писал(а) 30. Ноября 2011 :: 17:28:
вот только inner join не нужен там вовсе.

нужен
он пропускает помеченные на удаление серии
ну и кстати не нужно такие и заносить в #ГруппаСерий


Ну и каков тайный смысл в их пропуске, если потом один хрен фильтр на только те, что в списке серий ?
  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Возможна ли такая выборка одним запросом?
Ответ #35 - 30. Ноября 2011 :: 17:37
Печать  
Z1
а лучшее не враг хорошего?
Улыбка

кстати в #ГруппеСерий всегда только нужные серии
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #36 - 30. Ноября 2011 :: 17:39
Печать  
чуть лучше для sql чем (28)
Код
Выбрать все
КолвоРезультатов = 2; // здесь это число сколько значений в списке #ГруппаСерий
ТекстЗапроса = " select Tabl_2.Бригада [Бригада $Справочник.БригадыСборщиков]
  | , sum(Считаем)
  |from (
  | select Tabl_1.Бригада as Бригада  , 1 as Считаем from
  | (
  |SELECT distinct
  |	$СпрД.Бригада as Бригада
  |	,$СпрД.Серия
  |FROM
  |	$Справочник.БригадыСборщиковДопускиПоСериям СпрД With (NOLOCK)
  |INNER JOIN
  |	$Справочник.СерииНоменклатуры СпрС With (NOLOCK) ON СпрС.ID = $СпрД.Серия
  |
  |WHERE
  |	СпрД.IsMark = 0
  |     and $СпрД.Серия IN (SELECT Val From #ГруппаСерий)
  | ) as Tabl_1
  | ) as Tabl_2
  |group by Tabl_2.Бригада
  |having sum(Считаем) >= " + СокрЛП(КолвоРезультатов ) ;
 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #37 - 30. Ноября 2011 :: 17:41
Печать  
Foma писал(а) 30. Ноября 2011 :: 17:37:
Z1
а лучшее не враг хорошего?
Улыбка

кстати в #ГруппеСерий всегда только нужные серии

так можно было остановиться на первом моем ответе из поста # 1
и делать свертку в 1с.


PS и в списке #ГруппеСерий не должно быть серий помеченных на удаление иначе запрос не будет работать
  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Возможна ли такая выборка одним запросом?
Ответ #38 - 30. Ноября 2011 :: 17:43
Печать  
Согласен, что лучше получить результат SQL запросом, чем потом еще обрабатывать 1С-ми методами.
Почему условие в WHERE лучше, чем в JOIN?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможна ли такая выборка одним запросом?
Ответ #39 - 30. Ноября 2011 :: 17:44
Печать  
И один хрен - иннер джоин там явно лишний.
Тем более, удаляешь ты помеченные на удаление из основного справочника, а не у присоединенных серий.
Которые и присоединять не надо.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможна ли такая выборка одним запросом?
Ответ #40 - 30. Ноября 2011 :: 17:45
Печать  
Foma писал(а) 30. Ноября 2011 :: 17:43:
Почему условие в WHERE лучше, чем в JOIN?


Потому, что join- это декартово произведение обоих таблиц + фильрация результата + добавление строк (если это внешнее соединение)..
а where - это всего лишь фильтрация выборки.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #41 - 30. Ноября 2011 :: 17:47
Печать  
Foma писал(а) 30. Ноября 2011 :: 17:43:
Почему условие в WHERE лучше, чем в JOIN?

Ответ именно для этого случая
по тому что  ON идет по индексу
а условие in  в on  в индекс не попадает поэтому
слишком много закладок

т.е. в on надо оставлять то что попадает в индекс.
  
Наверх
 
IP записан
 
Foma
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 61
Зарегистрирован: 16. Сентября 2010
Re: Возможна ли такая выборка одним запросом?
Ответ #42 - 30. Ноября 2011 :: 17:48
Печать  
Т.е. фильтр по ID попадает в индекс, а по реквизиту "серия" - нет, поэтому лучше в WHERE?


Спасибо большое, всё работает.
Буду разбираться с запросом...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможна ли такая выборка одним запросом?
Ответ #43 - 30. Ноября 2011 :: 17:50
Печать  
Как в #30 проверил ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Возможна ли такая выборка одним запросом?
Ответ #44 - 30. Ноября 2011 :: 17:54
Печать  
Eprst писал(а) 30. Ноября 2011 :: 17:44:
И один хрен - иннер джоин там явно лишний.
Тем более, удаляешь ты помеченные на удаление из основного справочника, а не у присоединенных серий.
Которые и присоединять не надо.

согласен
я думал что не вносяться именно серии
окончательный запрос - завтра.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать