-
> Anatoly Podgoretsky © (21.11.08 15:05) [19]
Извините, что вклиниваюсь... Но пример в начале этой ветке не является примером вложенных запросов? Он - то у меня работает, правда, медленно...
-
> Увы, запрос не прошел. Курсор останавливается после join и пишет: тогда забудь.
> ИБ и его клоны IB ладно, черт с ним, но вот клоны... например про Firebird 2, читал/говорили что уже почти всю функциональность mssql поддерживает, и + что то исконно свое.
-
> Но пример в начале этой ветке не является примером вложенных запросов? это что то типа функции в виде запроса... т.е. это вызывается на каждую итерацию. обработка идет построчно, а не блоком как с нормальным подзапросом.
-
> sniknik (21.11.2008 15:14:21) [21]
Врут, но бог с ними, а мне что надо было ждать более 10 лет? Вроде только где то в 7 версии появились встроеные запросы? Я точно не помню. FireBird хоть он и не применим в данном случае, тоже не сразу обзавелся встроеными запросами.
-
ждать это конечно ;(... но вот тем кто начинает сейчас это повод хотя бы не использовать старые версии (если не говорить о переходе на что то иное ;), не представляю, как без них? не умом конечно понимаю, можно сделать процедуру, в ней цикл по курсору, т.е. добиться того же самого другими методами, но... это уже будет не язык общения с субд, а какой то суррогат с подменой самых нужных слов чем то искусственным.
-
Я выбираю СУБД не по номеру версии, а под задачу, подойдет ли, и при том по очень многим факторам. Иногда выбирать не приходится, когда покупная программа, от которой нельзя отказаться или альтернативы еще хуже.
-
> Посоветуйте, пожалуйста, какой индекс тогда лучше сделать? >
Как минимум на поля DSPTCH_PRDCA_ID, DSPTCH_DATE (это - обязательно!). По правилам разработки баз данных нужны первычные ключи DSPTCH_ID и PRDCA_ID.
Кстати, почему DSPTCH_PRDCA_ID - SMALLINT, а PRDCA_ID - INTEGER?
-
> sniknik © (21.11.08 15:14) [21] > > > Увы, запрос не прошел. Курсор останавливается после join > и пишет: > тогда забудь. > > > ИБ и его клоны > IB ладно, черт с ним, но вот клоны... например про Firebird > 2, читал/говорили что уже почти всю функциональность mssql > поддерживает, и + что то исконно свое.
в 2,5 встроили регулярные выражения. правда, она пока альфа(эта версия)
-
а по теме: убери подзапрос. сделай либо ХП, либо перейди на ФБ 2,х, там можно выполнить блок. тогда запрос можно переделать так execute block as declare variable d date; begin select max(Dsptch_Date) from Dsptch D2 where D2.Dsptch_Prdca_ID=D1.Dsptch_Prdca_ID into :d;
SELECT Dsptch_Prdca_ID, Dsptch_PostOffice_ID, Dsptch_Plan, Dsptch_MMYY, Dsptch_Date FROM Dsptch D1, Prdca WHERE Dsptch_Prdca_ID = Prdca_ID and D1.Dsptch_Date = :d AND DSPTCH_MMYY = '1008' and Prdca_Pttrn = 'Вкл.' ORDER BY Dsptch_Prdca_ID, Dsptch_PostOffice_ID; suspend; end; Примерно так, но тут неправильно 100%..:-)
-
> либо перейди на ФБ 2,х и проверь там возможность нормальных подзапросов, объединений с ними.
> Примерно так, но тут неправильно 100%..:-) не знаю как синтаксис, но тут и по логике не то, тут выбираются все записи на одну максимальную дату. и вполне вероятно что это будет всего одна запись, либо все из одной накладной (например), смотря как там, при каких условиях, у него идет изменение этого поля индивидуально карточками товара либо накладными. а по задаче, имхо, должны выбираться все товары с максимальной датой изменения каждого. если не так, и нужно именно то, что ты написал, то легко просто выполнить 2 запроса подряд, первым получить дату, и передать ее во второй параметром, и ничего менять в смысле версии будет не надо.
-
> sniknik © (22.11.08 11:11) [29]
я просто привел макет. а вся тормознутось оригинального запроса - из-за подзапроса...это "больное" место у ФБ(IB)... в плане скорости. лучше переписать в конструкцию for select do... .а в 2,х уже спокойно можно выполнить > sniknik © (21.11.08 13:50) [14]
|