Стрелок писал(а) 02. Марта 2018 :: 13:32:Вот реальный запрос
|FROM
| $ДокументСтроки.НарядНаПродукцию as ДокС
|INNER JOIN
| $Документ.НарядНаПродукцию as Док
|INNER JOIN
| 1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
| Жур.Date BETWEEN :ДатаЗап1~~ AND :ДатаЗап2~~
| AND $Док.ДатаИсполнения BETWEEN
Молись с таким запросом на оптимизатор sql!!!
Он может выполнить именно в таком порядке как написано в запросе.
Т.е. выбрать вообще все строки из ДокументСтроки.НарядНаПродукцию, это много и не быстро.
Потом сверить их на соответствие из за INNER с Документ.НарядНаПродукцию. А это вообще бессмысленно т.к. они все равно совпадут. Мало того, если оптимизатор решит что ДатаИсполнения нужно проверить именно на этом этапе то он прочитает и еще и всю таблицу Документ.НарядНаПродукцию.
И только потом может проверить попадает ли все это в условия на 1SJourn (если до этого дойдет, а не упадет по памяти или таймауту)
Лучше все наоборот...
|FROM
| 1SJourn as Жур
|LEFT JOIN
| $Документ.НарядНаПродукцию as Док
| ON Жур.IDDoc = Док.IDDoc
|LEFT JOIN
| $ДокументСтроки.НарядНаПродукцию as ДокС
| ON Жур.IDDoc = ДокС.IDDoc
|WHERE
| Жур.Date BETWEEN :ДатаЗап1~~ AND :ДатаЗап2~~
| AND Жур.DOCTYPE = $ВидДокумента.НарядНаПродукцию
| AND $Док.ДатаИсполнения BETWEEN что то там
или
|FROM
| 1SJourn as Жур
|INNER JOIN
| $Документ.НарядНаПродукцию as Док
| ON Жур.IDDoc = Док.IDDoc
| AND $Док.ДатаИсполнения BETWEEN что то там
Насчет написания $ВидДокумента.НарядНаПродукцию в этом диалекте сомневаюсь. Но должно быть что-то похожее.