Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Альтернатива для left outer join 
:(
    Опции темы
ExlibrisUnios
Дата 11.6.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.6.2009

Репутация: нет
Всего: нет



Добрый день!

Код

select code.batchno, detailA.batchfee , detailB.batchfee from Code code left outer join Detail detailA
on (detailA.id= code.id) left outer join Detail detailB (detailB.id= code.id) where code.category = categoryA order by code.id


Какой есть альтернативный вариант left outer join'у? Есть ряд причин (искуственных), по которым я не могу использовать left outer join. То есть мне нужен альтернативный способ для получения того же самого результата!

Спасибо!

PM MAIL   Вверх
Gluttton
Дата 11.6.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Код

select 
    code.batchno, 
    detailA.batchfee, 
    detailB.batchfee 
from 
    Code code,
    Detail detailA,
    Detail detailB
where 
    (detailA.id=code.id or code.id is null)
    and 
    (detailB.id=code.id or code.id is null)
    and code.category=categoryA 
order by code.id


Не уверен, что будет работать правильно - нет под рукой SQL-сервера...
Но думаю, что попробовать стоит smile ...

Код

order by code.id

Возможно подразумевалось
Код

order by code.batchno



1. Вот для таких вот таблиц TA и TB:
user posted image

user posted image

Я вот так реализовал LEFT JOIN:
Код

SELECT
    TA.B, TB.A
FROM
    TA, TB
WHERE
    TA.B=TB.A
UNION ALL
SELECT DISTINCT
    TA.B, NULL AS A
FROM
    TA, TB
WHERE
    TA.B NOT IN
    (   SELECT DISTINCT TB.A FROM TB
    )

При выполнении запрос возвращает данные:
user posted image

2. При адаптировании Вашего запроса под левое внешнее псевдо-соединение пришел к выводу, что в зависимости от количества соединений в одном запросе его объем увеличивется в "два в степени количества соединений" раз. Т.е. если в приведенном выше примере добавить ещё одно соединение, то количество строк увеличиться в двое.

3. Конкретно для приведенного Вами запроса у меня два замечания:
- order by code.id - сортировка по полю не указаному в предложении SELECT;
- т.к. Detail detailA и Detail detailB и on (detailA.id= code.id) и on (detailB.id= code.id), то не вижу смысла делать два псевдонима и выводить одинаковое фактически одно и то же поле дважды при одном и том же условии соединения проще дважды повторить название поля в предложении SELECT и при этом использовать одно соединение!

4. Опять лукавите - запрос не рабочий, пропущено "on" во втором соединении  smile ...

Это сообщение отредактировал(а) Gluttton - 11.6.2009, 22:36


--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.