|
|
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Раньше работал с Sybase SQL Anywhere (помоему я уже это писал ;) и пользовался там отличной фичей: select Table1.Col1, ... from (select ...) as Table1(Col1, Col2), ... Очень хоцицца на Firebird такое поюзать. В принципе это реализуется с помощью view, но есть проблемы - create view требует обязательного завершения транзакции прежде чем его использовать, что является неприемлимым. Буду благодарен за ответ в виде подсказки как выйти из положения или может такую фичу включат в следующих релизах Firebird? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 18:30 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
в принципе, это реализуется иногда с помощью join... а на sybase вы тоже налету вьюхи создавали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 18:33 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
"в принципе, это реализуется иногда с помощью join..." К сожалению есть запросы в которых join абсолютно бесполезен. "а на sybase вы тоже налету вьюхи создавали?" Там не надо этого делать! - он поддерживает подселекты прямо в секции from. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 18:43 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
авторК сожалению есть запросы в которых join абсолютно бесполезен. Есть. Но не так уж часто они встречаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 18:54 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
"Есть. Но не так уж часто они встречаются." Если БД состоит из пяти таблиц то и не встречаются. У нас огромный проект (>500 таблиц, >70Mb исполняемого кода, >600 отчетов получаемых с помощью ~6000 запросов). Так вот если хотя бы 1% из этого требут такие подзапросы получаем капец. Кроме того, эта фича на самом деле не отличается от уже реализованного механизма view. Просто надо научить его создавать (и уничтажать) временные view. Было бы круто! А вообще хотелось бы перейти на Firebird, но из-за этих двух недостатков слишком много усилий потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 19:16 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
У нас в базе 670 таблиц и 985 процедур. И обходимся. Покажи свои многострадальные вопросы. Мож общественность чего и подскажет. Оно понятно, когда привыкаешь к SELECT FROM (SELECT ...), то JOIN кажется убогим. Но это не совсем так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2004, 19:32 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Такая проблема частично решается использованием ХП. Причем соединение с ХП идет через ее параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 08:33 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Гмм, привести запросы не могу (боюсь любой из них заспамит весь форум, да и разобратьса в нем без базы и таких размеров запроса будет невозможно). Делать такие запросы мы начали не из-за хорошей жизни, и используем мы их только в случае крайней необходимости (когда основной запрос полностью выходит из под контроля из-за размеров и сложности для понимания). И еще одна причина применение данных подзапросов: Изначально база затачивалась под Sybase и репортер (чтоб он был здоров) был сделан на базе получения отчетов исключительно запросами (генерируемых автоматом исходя из дизайна и требуемых данных отчетов). Даже я бы сказал в результате на основе одного запроса полностью получается весь отчет. Переделать все наработки не представляется возможным. Я попытался сделать препарсер, разбивающий запрос на несколько частей (включая создание view), но пока все уперлось в стенку, из-за необходимости делать commit после обновления метаданных... Обидно, да! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 10:25 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
"Такая проблема частично решается использованием ХП. Причем соединение с ХП идет через ее параметр." Непонял. Как можно применять ХП без процедур? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 10:48 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
В Firebird 1.5 проблему можно решить так (только не говорите, что я извращенец). Допутим есть такой запрос (за синтаксис извините, не помню): Код: plaintext 1. Таким образом, например, можно подсчитать кол-во master записей в detail таблице. Создаем процедуру Код: plaintext 1. 2. 3. 4. 5. 6. И выполняем запрос: SELECT * FROM TABLE1 T LEFT JOIN GET_COUNT_FROM_VARCHAR('SELECT COUNT(*) FROM TABLE2 WHERE F_ID=' || T.ID ) ON (1=1) Получаем тот же результат, только со всеми master записями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 11:12 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
К сожалению этим проблема не решается - абсолютно то-же самое получается с помощью View, а create procedure является также изменением метаданных базы и в запросе сработает только после commit. Всем спасибо за помощь, видимо у нас в будующем ожидает тяжкая судьба переписывания запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 12:04 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
to Stressman. Ты не понял просто, о чем я говорю. В ХП можно выполнить любой запрос представленный строкой и не надо метаданные менять. Приведу пример попроще. Запрос вида: Код: plaintext Можно заменить таким образом. Создаешь процедуру с максимально необходимым кол-вом столбцов опреденных типов(можно все VARCHAR, а потом преобразовывать). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ну а дальше формируешь, например, такую строку: Код: plaintext (0 - здесь для соответствия параметров) и выполняешь запрос типа: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 12:27 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Процедуру не так написал. Надо так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 12:29 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
FreemanZAV, интересно и оригинально! Сейчас попробую (благо тестики имеются) и о результатах сообщу. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 12:57 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Попробовал - сработало!! Каковы ньюансы: 1. Геморрой с количеством параметров (и соотвественно полей в подзапросе - хотя конечно поможет создать процедуры на 1, 2, 3... параметров). 2. Геморрой с преобразованием типов параметров - либо точное совпадение либо сам туду-сюда преобразовывай. При преобразовании могут возникнуть проблемы с оптимизацией! 3. Оптимизация исполнения запроса. Есть подозрение, особенно при применении преобразования типов, может упасть скорость выполнения запроса относительно тех-же View (все таки View, как я понимаю механику, оптимизируется и выполняется не отдельно, а в совокупности с основным запросом - про процедуры ничего сказать немогу). Хотя радует то что скорость исполнения в двух вариантах моего теста была практически одинаковая! Если кто выскажется по этим пункта (рекомендации, советы или знания в области схем оптимизации Firebird) было бы клево. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2004, 14:52 |
|
||
|
Подзапросы в секции FROM
|
|||
|---|---|---|---|
|
#18+
Привет, В Firebird-овской конфе сказали, что эта фича будет в FB2.0 С уважением Владимир Борзов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=475&tid=1578771]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 440ms |

| 0 / 0 |
