|
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 еще не сделал, вместо него использовал повторно $Документ.Реализация с другим алиасом для добычи подчиненности
и такой запрос работает медленнее подзапроса пока
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший