|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.04.2012, 13:02 | #1 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Как работает inner join при неудовлетворении условия?
Подскажите, пожалуйста, как в SQL FB2.5 написать код правильно? Есть нечто такое:
Код:
Минусом написанного кода является необходимость дополнительного "select paramP..." для каждой строки TableX, можно ли как-то оптимизировать? (Делать проверку в написанной выше выборке в самом начале перед основным select*from и сохранять во временную переменную (select ParamP from TableP where ID=:InputID into ParamTempResult), а затем в строке inner join проверять уже ParamTempResult=1 можно было бы, если бы эта вся выборка была ХП, но если это разово запускаемый SQL-код не являющийся ХП - временные переменные использовать нельзя, поэтому такой вариант не подходит.) 1. Как вообще отработает строка с inner join если указанное условие (в скобках) не удовлетворено?: а) результат всей выборки будет пустым (произойдёт объединение inner join TableX + null)? б) или при неудовлетворении условия просто строка inner join пропускается, и произойдёт объединение по второй строке: TableX + left join TableY ? 2. В принципе проверку условия (if (select ParamP from TableP where ID=:InputID)=1 then exit) можно перенести в саму SP, но тогда как отработает в написанной выше выборке строка с inner join если указанная ХП-таблица (SP) вернёт 0 строк? (пустой ответ): а) объединение inner join сработает с 0 строк и общим результатом будет 0 строк? б) объединение inner join сработает с 0 строк и общим результатом будут все строки TableX? в) или inner join будет пропущено? 3. Есть ли в FB2.5 возможность как-то написать [inner join SP (Param1) on TableX.id=SP.id and SP.rowcount>0] ? (пробовал так, [row_count(SP)>0], [SP is not null], [select count(*) from SP >0], [(select count(*) as cnt from SP) cnt is not null] - IBexpert всё время ругается на неверный синтаксис) 4. Есть ли какая-то разница между inner join и cross join ? Последний раз редактировалось DeveloPerchik; 14.04.2012 в 16:14. |
14.04.2012, 15:31 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
from t1
inner join z2 on ( условиЯ )... к каждой строке t1 приосединяются ВСЕ строки из z2 ДЛЯ КОТОРЫХ выполненЫ условиЯ. если какой-то строке из t1 найдется несколько (K) строк в z2, в результате будет несколько (K) строк с одинаковой частью t1 и разными вариантами z2. inner вводятся те НАБОРЫ строк в которых есть И часть t1 и часть z2. left выводятся все стрки t1 с возможными (для этой строки) твариантами z2 right все строки z2 c возможными (для этой строки) вариантами t1
программа — запись алгоритма на языке понятном транслятору
|
14.04.2012, 16:07 | #3 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Спасибо, но это всё очевидно и не даёт решения поставленной задачи...
Я слегка подкорректировал топик, чтобы было проще вникать в задачу, возможно Вы сможете ответить хотя бы на вопросы 2-3 ? Последний раз редактировалось DeveloPerchik; 14.04.2012 в 16:27. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли как-то сделать if для join в FB2.5? | DeveloPerchik | БД в Delphi | 6 | 10.04.2012 11:32 |
inner join/full join | SashkaSonin | БД в Delphi | 6 | 23.03.2012 17:13 |
КАк сделать JOIN в Access с объединением по NULL | Izhic | Помощь студентам | 1 | 09.02.2011 11:18 |
Как скрыть строку при выполнении условия в другой ячейке | Алексей777 | Microsoft Office Excel | 4 | 09.12.2010 10:06 |
INNER JOIN в Delphi не работает. | Droid | БД в Delphi | 2 | 03.07.2009 12:30 |