-
Добрый день коллеги. Помогите с запросом IB. Требуется составить запрос вида:
Select * from T1 where T1.P1 > (select P1 from T2 where...) and T1.P2 < (select P2 from T2 where ...)
причем вот этот второй вложенный select и третий это тоже самое.
Т.е. запрос должен бы выглядеть как то так (по смыслу, но не по синтаксису - понятно что такого запроса не бывает):
Select * from T1 where T1.P1 >, T1.P2 < (select P1, P2 from T2 where...)
-
В приведеном коде не то, что второго параметра не видать, но и первого тоже.
-
телепатор подсказывает, что раз подзапросы одинаковые, то автор хочет чтоб параметры по 2 раза не присваивать
-
допустим таблица T1 содержит столбцы (числовые) P1 и P2. T2 тоже содержит пары чисел P1, P2.
P1 и P2 в данном случае не фиксированные пары чисел, а получаются из T2. Стало быть параметры.
Если я не прав в терминологии извиняюсь, но смысл думаю понятен.
-
>телепатор подсказывает, что раз подзапросы одинаковые, то автор хочет чтоб параметры по 2 раза не присваивать
воистину. мало того - значение P1 второго запроса должно соответствовать P2 третьего запроса. Т.е. они должны быть из одной строки T2
-
для этого параметры вообще не нужны.
-
У меня телепатор гораздо хуже работает.
А что нужно? Можно примерчик?
-
where t1.f1 = t2.ff1 and t1.f2 = t2.ff2 и так далее
-
хм. попробую. спасибо.
-
> [0] REA (07.07.08 14:52)
А какая связь между таблицами?
-
хм. да никакой связи.
спасибо за совет - работает. правда придется логику программы переделать, но такой вариант подойдет.
-
> [10] REA (07.07.08 15:46)
> хм. да никакой связи.
Тогда что мыслилось вместо многоточия в исходном подзапросе?
-
> REA (07.07.08 15:46) [10]
>
> хм. да никакой связи.
>
> спасибо за совет - работает. правда придется логику программы
> переделать, но такой вариант подойдет.
А зачем ее менять, если выборка вернет то, что нужно?
-
В подзапросах подразумевалось возвращение результата из множества записей. Вопрос, где условия в подзапросах, по которым возможно возвратить 1 значение для сравнения? И если все таки есть связь между таблицами не лучше ли воспользоваться JOIN'ом
select T1.*
from T1
left outer join T2 on (T2.Поле связи = T1.Поле связи)
where
T1.P1 > T2.P1 and
T1.P2 < T2.P2