![]() |
|
v7: 1С++ SQL избавиться от вложенного подзапроса | ☑ | ||
---|---|---|---|---|
0
Холст
05.02.14
✎
14:17
|
типовая ТиС, SQL 2005, 1С++
задача получить таблицу Заявок и сумму проведенных подчиненных Реализаций к ним, если такие есть, если проведенных Реализаций нет, то просто выводить Заявки набросал работающий запрос Select top 500 cast(Ж.iddocdef as char(4)) + Ж.iddoc[Док$Документ] -- , $ДокЗ.Контрагент as [Контрагент$Справочник.Контрагенты] , $ДокЗ.Сумма СумЗаявки --, $ДокР.Сумма СумРеализации , sum($ДокР.Сумма) СумРеализации , COUNT(ДокР.iddoc) КолР FROM _1SJourn as Ж (NOLOCK) , $Документ.ЗаявкаПокупателя as ДокЗ left join (Select --top 50 ДокР.* FROM _1SJourn as Ж (NOLOCK) , $Документ.Реализация as ДокР (NOLOCK) where 1=1 and Ж.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата and Ж.Closed & 1 = 1 and Ж.IdDoc = ДокР.IdDoc) as ДокР on Substring($ДокР.ДокОснование,5,15) = ДокЗ.IdDoc where 1=1 and Ж.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата and Ж.IdDoc = ДокЗ.IdDoc -- and $ДокЗ.Сумма <> $ДокР.Сумма group by Ж.iddocdef, Ж.iddoc, $ДокЗ.Сумма как можно избавиться от вложенного SElect-а, не исказив результата ? |
|||
1
dk
05.02.14
✎
14:19
|
а чем вложенный не угодил?
|
|||
2
Ёпрст
гуру
05.02.14
✎
14:20
|
можно, всё в топку, слепить запрос к _1scrdoc, наслаждаться
|
|||
3
Ёпрст
гуру
05.02.14
✎
14:20
|
(1) тем, что не работает
|
|||
4
Холст
05.02.14
✎
14:23
|
(1) вложенный медленно же
(2) с _1scrdoc же все равно надо будет сцепку с Журналом по Реализациям делать чтобы только проведенные отобрать, не ? |
|||
5
Холст
05.02.14
✎
14:25
|
есть еще мысля сложить 2 запроса (union all) - один с Заявками без подчиненных другой с подчиненными проведенными. Но быстрейший ли будет результат ?
|
|||
6
Ёпрст
гуру
05.02.14
✎
14:54
|
(4) там не будет коррелированного подзапроса
|
|||
7
Холст
05.02.14
✎
15:05
|
(6) так,
Коррелированный подзапрос - это такой подзапрос, который содержит ссылку на столбец, который есть во внешнем запросе. значит в случае с _1scrdoc подзапрос останется, но не будет коррелированного и значит быстрей будет работать... мне пока это не очевидно если у тебя есть кусок такого запроса с _1scrdoc который можешь сюда кинуть было бы неплохо а то не соображу так сразу как это поможет, ведь сцепка с _1SJourn по подчиненным для вылавливания только проведенных подчиненных все равно должна остаться ? |
|||
8
Ёпрст
гуру
05.02.14
✎
15:11
|
подзапроса там не будет, вообще.
|
|||
9
Холст
05.02.14
✎
15:24
|
(8) да подзапроса не будет, но пока вместо 1 left join
у меня набирается 3 left join -а т.е. FROM $Документ.ЗаявкаПокупателя left join _1scrdoc --связка подчиненного left join _1SJourn --условие на проведенность left join $Документ.Реализация --добыча суммы с _1scrdoc еще не сделал, вместо него использовал повторно $Документ.Реализация с другим алиасом для добычи подчиненности и такой запрос работает медленнее подзапроса пока |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |