|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.04.2012, 22:35 | #1 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Можно ли как-то сделать if для join в FB2.5?
Может кто осилит такую задачу...
1. В БД есть небольшая ХП "SP", которая получая один параметр "Param1" ищет соответствия в TableS и возвращает список ID строк значения которых удовлетворяют запросу Param1. Но, в этой ХП в начале есть проверка на условие типа if Param1=TableP.Field1 then вернуть все значения TableS без проверки на соответствие. Иначе SP может вернуть некий список удовлетворяющий запросу или даже пустой спсок, если соответствий не найдено. 2. Другие ХП используют SP так: select * from TableX inner join SP (Param1) on TableX.id=SP.id Таким образом из TableX выбираются строки ID которых равны результату SP. Но, что получается - если в SP сработала проверка [if Param1=TableP.Field1 then вернуть все значения TableS] SP должна вернуть все значения TableS чтобы работала эта конструкция - но в этом случае в п.2 нет никакого смысла в строке [inner join SP (Param1) on TableX.id=SP.id] тк в п.2 результатом и с inner join и без него будут ВСЕ строки TableX! Вопрос - можно ли как-то сделать, чтобы если в SP Param1 удовлетворил первой проверке и SP должно вернуть всю TableS - вообще отключить/пропустить в п.2 функцию inner join чтобы не делать этого лишнего объединения? Пробовал в ХП из п.2 в секцию from-join добавить case/if - но FB ругается, нельзя так, говорит. Поэтому создал такую конструкцию, тк SP возвращает не слишком много строк (до 100шт), затраты при малом кол-ве данных в БД небольшие, но всё же как-то кривовато. Логика всей конструкции работать должна так: select * from TableX case not Param1=TableP.Field1 then inner join SP (Param1) on TableX.id=SP.id end Есть соображения как можно это порешать? Последний раз редактировалось DeveloPerchik; 09.04.2012 в 22:47. |
10.04.2012, 01:21 | #2 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
execute block в помощь
|
10.04.2012, 01:27 | #3 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
И что? EB даёт возможность исполнять из программы кусок SQL, а тут вопрос - как сам SQL написать-то ???
|
10.04.2012, 01:33 | #4 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
execute block можно назвать "ХП на выезде".
Позволяет в своих рамках выполнять что угодно, любые конструкции SQL. Точно также как и в ХП. Почему не сделать, если не получается в одном, два разных запроса, которые будут выполняться по условию. |
10.04.2012, 10:56 | #5 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
И так уже два запроса - две ХП. Никаких преимуществ в данном вопросе EB не даёт.
Ещё раз - вопрос темы - как правильно написать SQL код с возможностью делать и не делать inner join ??? |
10.04.2012, 11:14 | #6 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Конструкция вида:
Код:
|
10.04.2012, 11:32 | #7 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
в FB конструкция типа:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли писать php код внутри javascript инструкции if? если можно, то как это сделать? | Ubihinon | JavaScript, Ajax | 2 | 20.02.2012 08:40 |
можно ли писать php код внутри javascript инструкции if? если можно, то как это сделать? | Ubihinon | PHP | 2 | 18.02.2012 17:45 |
Как можно сделать? | cargo29 | Работа с сетью в Delphi | 6 | 18.03.2011 22:38 |
Хочу сделать форму для ввода паролей! Для этого текст должен быть зашифрован в (*****) ! Как сделать | vitaaly | Visual C++ | 2 | 12.02.2011 12:29 |
КАк сделать JOIN в Access с объединением по NULL | Izhic | Помощь студентам | 1 | 09.02.2011 11:18 |