|
Как проверить результат соединения в запросе? | ☑ | ||
---|---|---|---|---|
0
extrim-style
17.10.12
✎
22:08
|
Есть запрос в цикле, который пересчитывает колонку с суммой. В запросе - левое соединение исходной таблицы к таблице коэффициентов. В результате запроса - пересчитанная по коэффициентам исходная таблица. Необходимо завершить цикл, если соединение не произошло. Первое, что пришло - выбирать дополнительно поле с коэффициентом через ЕСТЬNULL(Коэффициент, 0) и смотреть в итог поля. Может можно проще?
|
|||
1
alexei366
17.10.12
✎
22:10
|
Мож пример скинешь, а то как-то неочень представляю что ты хочешь
|
|||
2
extrim-style
17.10.12
✎
22:22
|
Что-то вроде:
Для Сч=1 по Макс Цикл ... "ВЫБРАТЬ | ТЗ.Наименование, | ТЗ.Сумма * ТЗ1.Коэффициент КАК Сумма |ИЗ | ТЗ КАК ТЗ | ЛЕВОЕ СОЕДИНЕНИЕ ТЗ1 КАК ТЗ1 | ПО ТЗ.Наименование = ТЗ1.Наименование" ... КонецЦикла Необходимо завершить цикл, когда левое соединение не произошло. |
|||
3
acsent
17.10.12
✎
22:23
|
делаешь левое соединение Макс раз, умножаешь на первый не NULL
|
|||
4
Лоботряс
17.10.12
✎
22:31
|
добавь в выводимые поля поле из левой таблицы и проверяй его на NULL
|
|||
5
Лефмихалыч
17.10.12
✎
22:32
|
(0) гори в аду за запросы в цикле, еретик!
|
|||
6
extrim-style
17.10.12
✎
22:32
|
(3) не понял, это ты к тому, как сделать в одном запросе, сформировав текст запроса в цикле? поясни, пжл. не понял насчет "умножаешь на первый не NULL".
"делаешь левое соединение Макс раз" - так речь как раз о том, как оптимизировать запрос, и не делать его Макс раз. (4) ну я так и писал в (0) |
|||
7
extrim-style
17.10.12
✎
22:33
|
(5) это не баг, это фича! =)
|
|||
8
Лефмихалыч
17.10.12
✎
22:38
|
Если надо узнать, есть ли записи в ТЗ, для которых нет соответствия в ТЗ, то можно пакетным запросом выбрать первую строку из исключения:
но лучше отказаться от глубоконеправильной идеи выполнять запросы в цикле - козлёночком станешь |
|||
9
extrim-style
17.10.12
✎
22:47
|
(8) понял. спасибо.
только в таком случае получается соединение выполняется Макс*2 раз, между тем как изначально планировалось уменшить количество соединений по сравнению с Макс. |
|||
10
extrim-style
17.10.12
✎
22:48
|
(9) нет. не так. соединение выполняется Норм*2 раз, где Норм<Макс, но скорее всего Норм*2>Макс
|
|||
11
Лефмихалыч
17.10.12
✎
22:51
|
(9)(10) писец ты логичный. Куячит запросы в цикле и при этом задумывается, а сколько там у него раз будет соединение выполняться? Да какая похер разница? ЭТо все равно ручник и быдлокодинг
|
|||
12
extrim-style
17.10.12
✎
22:54
|
(11) не знаю, что тут можно сделать. Разве что формировать текст запроса в цикле, а выполнять единожды. Так лучше будет?
|
|||
13
Лефмихалыч
17.10.12
✎
22:55
|
(12) откуда навязчивая идея про циклы вообще?
|
|||
14
ASU_Diamond
17.10.12
✎
22:57
|
(12) как будет правильно сделать без постановки задачи тебе никто не скажет. Бывают задачи в которых и в цикле допускаются запросы.
|
|||
15
extrim-style
17.10.12
✎
22:59
|
(13) работаю с графами, вычисляю маршруты, какбэ заранее ничего не известно.
|
|||
16
Лефмихалыч
17.10.12
✎
23:00
|
(15) ну ты прям пролил свет, всем всё сразу стало понятно
|
|||
17
extrim-style
17.10.12
✎
23:05
|
(16) конечно понятно. Тот, кто знаком с теорией графов, понимает, что это - тёмный лес. =)
Спасибо за помощь. Я подумаю, что тут можно предпринять) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |