Опять о процедурах

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 01 сен 2005, 15:00

я, конечно, темный человек, но вроде в Оракле хрен напишешь плюсиками вот такой джойн:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t1.f2 = 2
order by 1

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 01 сен 2005, 15:05

sag писал(а):В селект-запросах иб-линейки хп выступает как набор данных, который может состоять из множества "строк". Отсюда и джойны.
так что SQL таки будет работать???????

Select
Main_table.D, Main_table.P, Main_table.R,
TEST_PROC.L, TEST_PROC.K
From Main_table
Left Join
TEST_PROC(Main_table.D, Main_table.P, Main_table.R) On 0=0

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 01 сен 2005, 15:09

dimitr писал(а):я, конечно, темный человек, но вроде в Оракле хрен напишешь плюсиками вот такой джойн:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t1.f2 = 2
order by 1
select t1.f1, t2.f2
from t1, t2
where t1.f2 = 2 and t1.f1 = t2.f2 (+)
order by t1.f1

или я чего-то не понял?

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 01 сен 2005, 15:19

dimitr писал(а):я, конечно, темный человек, но вроде в Оракле хрен напишешь плюсиками вот такой джойн:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t1.f2 = 2
order by 1
я еще темнее, с ораклом уже 4 года не встречался... Так вот, по остаточным своим воспоминаниям: не зная таких возможностей не воникало в этом потребностей :)
Хотя первые подозрения у меня начали возникать (а это я помню!) в процессе лефт-джоинья средствами локального движка первых дельфей на парадоксовых табличках... еще до дефолта это было... и это помню :(

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 01 сен 2005, 15:22

tie писал(а):или я чего-то не понял?
у dimitr-а рука дрогнула, он думал про:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t2.f3 = 2
order by 1

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 01 сен 2005, 16:48

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t1.f2 = 2
order by 1 ]
будет:

Код: Выделить всё

select t1.f1, t2.f2 
from t1, t2, (select f1 from t1 where f2 = 2) t3 
where t1.f1 = t3.f1(+) and t3.f1 = t2.f2(+) 
order by t1.f1 
если я правильно понял работу left join в данном контексте.....
а
sag писал(а):dimitr-а рука дрогнула, он думал про:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t2.f3 = 2
order by 1
будет:

Код: Выделить всё

select t1.f1, t2.f2 
from t1, (select t2.f2 from t2 where t2.f3 = 2) t3 
where t1.f1 = t3.f2(+)
order by t1.f1 
написать что хотел, вопрос....

Код: Выделить всё

select t1.f1, t2.f2
интересно смотрится с

Код: Выделить всё

on t1.f1 = t2.f2 
Лучше на пальцах обьяснил что есть и чего хотел получить.....
Тоже мне бином Ньютона..

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 01 сен 2005, 19:02

tie писал(а):
sag писал(а):
будет: Тоже мне бином Ньютона..
Привет, tie,
бином биномом, но первоначального твоего ответа на мое письмо я чего-то не узнаю ;-)
Ага, селект-фром-селект рулит :)
offtop-on
Вот и говорю - давненько я с ним, с ораклом, не встречался.... А когда встречался - то другие проблемы были. Это еще семерка была. Так вот там селект-фром-селект вроде бы как и был (офицально вроде как и нет, но в sqlplus-е он проходил), а тулзы ораклиные (формы и репорты) таких выкрутасов через себя не пропускали... И не было нам щастья, хотя и без этого щастья обходились и не жужжали :)
offtop-off

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 01 сен 2005, 19:08

sag писал(а):Вот и говорю - давненько я с ним, с ораклом, не встречался.... А когда встречался - то другие проблемы были. Это еще семерка была.
Я тоже с семерки начинал.

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 01 сен 2005, 19:37

tie писал(а):Я тоже с семерки начинал.
нее, я на ней, на семерке, заканчивал. Начинал на ранней шестерке, еще под Banyan-ом.
p.s.извините за оффтоп

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 09:41

tie писал(а): select t1.f1, t2.f2
from t1, t2
where t1.f2 = 2 and t1.f1 = t2.f2 (+)
order by t1.f1

или я чего-то не понял?
не понял. Твой запрос не выведет записей с T1.F2, отличным от двух. Мой выведет.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 09:42

sag писал(а):у dimitr-а рука дрогнула, он думал про:

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t2.f3 = 2
order by 1
руки у меня пока что не дрожат :-) Что написал, то и имел ввиду. Твой вариант на плюсиках пишется легко.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 09:49

tie писал(а):

Код: Выделить всё

select t1.f1, t2.f2 
from t1 left join t2 on t1.f1 = t2.f2 and t1.f2 = 2 
order by 1 ]
будет:

Код: Выделить всё

select t1.f1, t2.f2 
from t1, t2, (select f1 from t1 where f2 = 2) t3 
where t1.f1 = t3.f1(+) and t3.f1 = t2.f2(+) 
order by t1.f1 
если я правильно понял работу left join в данном контексте.....
да, вроде оно. Но запрос становится сложнее.
tie писал(а):

Код: Выделить всё

select t1.f1, t2.f2
from t1 left join t2 on t1.f1 = t2.f2 and t2.f3 = 2
order by 1
будет:

Код: Выделить всё

select t1.f1, t2.f2 
from t1, (select t2.f2 from t2 where t2.f3 = 2) t3 
where t1.f1 = t3.f2(+)
order by t1.f1 
проще так:

Код: Выделить всё

select t1.f1, t2.f2 
from t1, t2 
where t1.f1 = t2.f2(+) and t2.f3 (+)= 2
order by t1.f1 
ладно, замяли... мы и так отошли от темы :-)

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 09:55

sag писал(а):А когда встречался - то другие проблемы были.
угу. Я, натрахавшись с плюсиками а-ля мой предыдущий сценарий, радостно перешел в девятке на нормальные джойны. Мдя. Лучше бы я этого не делал. На джойнах-этажерках варианта реакции было три - неправильный результат, уход в даун с крейзи-планом или internal Oracle error. Начиная с какого-то патча худо-бедно внешние джойны вроде заработали, но "осадочек остался" (с) :-)

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 02 сен 2005, 10:11

dimitr писал(а):
sag писал(а):у dimitr-а рука дрогнула
руки у меня пока что не дрожат :-) Что написал, то и имел ввиду. Твой вариант на плюсиках пишется легко.
:-) ооо, пардон, День знаний по моему организму катком прошелся.....
dimitr писал(а):Лучше бы я этого не делал.
:-)

tie
Сообщения: 39
Зарегистрирован: 14 июл 2005, 12:12

Сообщение tie » 02 сен 2005, 11:48

Привет, dimitr!
dimitr писал(а): ладно, замяли... мы и так отошли от темы :-)
Замяли то замяли... Однако твоя фраза:
dimitr писал(а): я, конечно, темный человек, но вроде в Оракле хрен напишешь плюсиками вот такой джойн:
Однако...
Сначала "нормально" построй базу данных, чтобы потом не писать такие кривые запросы.
Я стараюсь обходиться без плюсиков, по крайней мере быстрее работает, а для нас это критично.

Привет, sag!
С шестеркой я воевал. И как всегда не понимал смысла.
а потом задачи поменялись
помнищь такая штучка была netwareconnect (кажется)
так вот
когда ее долбили - поняли, что проще на семерке
решение задач, со временем, меняется...

Опять вопросик.
Мне с клиента на сервак нужно передать 1000 параметров, сделать все необходимые update и insert данные в архивы
за сколько я это могу сделать?
как уложиться в 1 сек.?

Ответить