olegenty |
Отправлено: 09.06.2004, 09:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
что-то я не пойму, OUTER JOIN в Interbase/Firebird/Yaffil вообще не пашет?
пишу отдельно запрос левой части. результат есть.
соединяю внешним левым объединением — И ЗАПИСЕЙ ОСТАЁТСЯ МЕНЬШЕ. вместо NULL в полях правой части, для которых нет связанных записей, поля ПРОСТО НЕ ВОЗВРАЩАЮТСЯ. кто нибудь сталкивался с этой пробемой?
вопрос-то решается легко: пишется ХП по левой части, которая внутри себя доцепляет либо заполняет NULL поля правой части. но это в разы медленнее, чем OUTER JOIN, а он не работает...
|
|
Nick |
Отправлено: 10.06.2004, 10:31 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Пробовал поработать
FULL OUTER JOIN
С большими наборами данных наоборот работает в разы медленней
чем ХП которая выбирает сначала по левой части все,
потом то что есть в правой и нет в левой.
|
|
olegenty |
Отправлено: 10.06.2004, 11:59 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
мне фулл не нужен, нужен RIGHT/LEFT, не работающий, падла, как в SQL-92 прописано и должно работать...
|
|
Deem |
Отправлено: 11.06.2004, 10:46 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
У меня работает.
Пример:
табл SERVICE
SERVICE SPECID
Обновление1 2
Обновление2 1
Обновление3 3
Обновление4 4
Обновление5 null
Обновление6 null
табл SPEC
ID NAME
1 Дима
2 Саша
3 Петя
4 Коля
select name, service
From SPEC right join SERVICE on (SPECID = ID)
Результат:
NAME SERVICE
Саша Обновление1
Дима Обновление2
Петя Обновление3
Коля Обновление4
null Обновление5
null Обновление6
Если к указанному запросу дописать where что-то там, то можно результат укоротить. Мож там у тебя ошибка?
|
|
Deem |
Отправлено: 11.06.2004, 12:48 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Добавляю таблы
SERVICEID DDATE
1 01.06.2004
2 02.06.2004
6 06.06.2004
5 05.06.2004
NAME ID
январь 1
февраль 2
март 3
апрель 4
май 5
июнь 6
июль 7
август 8
сентябрь 9
октябрь 10
ноябрь 11
декабрь 12
, а в service добавляю ID
и пишу
CODE |
select SP.name, service, ddate,m.name
From SPEC SP right outer join SERVICE SE on (SE.SPECID = SP.ID)
left outer join DATA DA on (Se.ID = DA.SERVICEID)
left outer join MONTHES M on (case when da.ddate is null
then 0
else
extract (MONTH FROM DA.DDATE)
end = M.ID)
|
Результат:
NAME SERVICE DDATE NAME1
Саша Обновление1 01.06.2004 июнь
Дима Обновление2 02.06.2004 июнь
Петя Обновление3 null null
Коля Обновление4 null null
nul Обновление5 05.06.2004 июнь
nul Обновление6 06.06.2004 июнь
(Cколько ни долбался, нормальных колонок не получилось. Даже ТАВ сжирает. )
Отредактировано Deem — 11/06/2004, 13:54
|
|
AVC |
Отправлено: 11.06.2004, 12:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А в чем вопрос. Результат не противоречит вашим данным или я чего то не вижу. |
|