Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите оптимизировать прямой запрос 1sqlite (число прочтений - 1938 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Помогите оптимизировать прямой запрос 1sqlite
02. Ноября 2010 :: 06:28
Печать  
Есть запрос:
Код
Выбрать все
SELECT
ж.iddoc [План :Документ]
, ж.iddocdef [План_вид :ВидДокумента]
, ж.date [ДатаПлан :Дата]
, пс.lineno [НомерСтроки]
, пс.Продукция [Прод :Справочник.Номенклатура]
, пс.Спецификация [Спецификация :Неопределенный]
, пс.Конкретизация [Конкретизация :Справочник]
, пс.Количество
, жс.iddoc [Сопр :Документ]
, жс.iddocdef [Сопр_вид :ВидДокумента]
, жс.date [ДатаСопр :Дата]
, с.Количество [Кол :Число]
FROM [Журнал] ж
LEFT JOIN [Документ.План] ш ON ш.iddoc = ж.iddoc
LEFT JOIN [ДокументСтроки.План] пс ON пс.iddoc = ж.iddoc
LEFT JOIN [Журнал] жс ON пс.iddoc = SUBSTR(жс.ДокументОснование,5,9) AND жс.iddocdef = :ВидДокумента.СопроводительныйЛист
LEFT JOIN [Документ.СопроводительныйЛист] с ON с.iddoc = жс.iddoc AND пс.Продукция = с.Изделие AND SUBSTR(пс.Конкретизация, 5, 9) = с.Конфекция AND SUBSTR(пс.Спецификация, 3, 13) = с.Спецификация
WHERE ж.iddocdef = :ВидДокумента.План AND ж.closed  = 1 



Он дает, например, такие строки:
План НомерСтроки Сопр Кол
п1 1 с1 10
п1 1 с2
п1 2 с1
п1 2 с2 20
п1 3 с1
п1 3 с2

Хотелось бы получить следующее:
План НомерСтроки Сопр Кол
п1 1 с1 10
п1 2 с2 20
п1 3

Смысл:
в ПУБ есть документ План, добавлен самописный док СопрЛист.
Листы создаются к строке плана на основании плана.
Цель:
Получить список выданных сопроводительных плана (в примере к третьей строке сопр. еще не выдан).
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #1 - 02. Ноября 2010 :: 06:39
Печать  
в СопроводительныйЛист,
Изделие  - реквизит шапки ?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #2 - 02. Ноября 2010 :: 06:42
Печать  
А тебе достаточно поменять left на inner  в присоединении СопроводительныйЛист.. чтоб фильтровал только строки, где в документе основания что-то есть.


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


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #3 - 02. Ноября 2010 :: 06:57
Печать  
Eprst писал(а) 02. Ноября 2010 :: 06:39:
в СопроводительныйЛист,
Изделие  - реквизит шапки ?

Именно. Пока пытаюсь только через шапку связать. Строки только на количество влияют.
Eprst писал(а) 02. Ноября 2010 :: 06:42:
А тебе достаточно поменять left на inner  в присоединении СопроводительныйЛист.. чтоб фильтровал только строки, где в документе основания что-то есть.

В основании всегда что-то есть. Вопрос в наличии подчиненного документа.
Поясню:
Первый джойн цепляет шапку плана к журналу планов.
Второй - цепляет строки к шапке плана.
Третий находит все подчиненные листы.
Четвертый проверяет правильность шапки листа.
Вот конфликт между третим и четвертым, т.к. третий почти всегда что-то найдет, а четвертый может заметить несоответствие... именно это и не могу пока разрулить...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #4 - 02. Ноября 2010 :: 08:32
Печать  
Тебе надо либо либо условие на не пустое значение количества в условие пихать, либо просто отсекать лишнее через внутреннее соединение..
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #5 - 02. Ноября 2010 :: 09:14
Печать  
inner удаляет из выборки третью строку ... пробовал уже ...

т.е. вопрос в том, как убрать лишние строки, но оставить нелишние Улыбка
третьей строке плана не соотвтетствует ни один сопроводительный - потому строка должна остаться ...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите оптимизировать прямой запрос 1sqlite
Ответ #6 - 03. Ноября 2010 :: 07:25
Печать  
Тогда просто group by воткни и функцию..
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать