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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Левое внешнее соединение, в Oracle 8 
V
    Опции темы
DEER
Дата 2.5.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Добрый день. Пусть есть две таблицы
Table1:
 - id1
 - name1
 - Table2ID
Table2:
 - id2
 - name2

Нужно сделать выборку, чтобы вместо Table2ID выводилось name2. При этом поле Table2ID может быть не заполнено (в этом случае выводить ""). Те получается следующий запрос:
Код
SELECT t1.id1, t1.name1, t2.name2
FROM Table1 t1 LEFT OUTER JOIN Table2 t2 ON t1.Table2ID = t2.id


но в 8'ом Oracle нет поддержки соединений.... как быть?
попробовал вот так
Код
select t1.id
     , t1.name
    , decode(t1.Table2ID, NULL, '', t2.id) t2_name
from table1 t1, table2 t2
where (t1.Table2ID = t2.id or t1.Table2ID IS NULL) 


но он выводит записи, для которых не заданно поле Table2ID по несколько раз.

как быть?
 


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
DEER
Дата 2.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



сделал так
Код
select DISTINCT 
       t1.id    
     , t1.name    
    , decode(t1.Table2ID, NULL, '', t2.id) t2_name    
from table1 t1, table2 t2    
where (t1.Table2ID = t2.id or t1.Table2ID IS NULL) 

Остается вопрос на сколько это правильно?? 


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
bas
Дата 2.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

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



Left Join 
PM MAIL   Вверх
LSD
Дата 2.5.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Код
select t1.id, t1.name, t2.name2
  from table1 t1, table2 t2
  where t1.table2id = t2.id
union
select t1.id, t1.name, ''
  from table1 t1
  where t1.table2id is null


P.S. А ты уверен, что нет join-ов? 
Просто у меня сейчас нет доки по 8-му ораклу под рукой. Там у них просто был особый синтаксис для join-ов: (+), проверь. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DEER
Дата 3.5.2006, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



да с UNION тоже работает правильно.

А вот слово JOIN я в книжках по 8му ораклу не нашел  smile у меня тут 4 книги и во всех написано что соединять надо через условие.
  


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
LSD
Дата 4.5.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



А вот так не сработает?
Код
select T1.ID1, T1.NAME1, T2.NAME2
from TABLE1 T1, TABLE2 T2
where T1.TABLE2ID = T2.ID(+)
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
jsa
Дата 5.5.2006, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

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



Код

select a.id1, a.name1, (select  b.name2 from Table2 b where b.id2 = a.Table2ID)
from Table1 a
 


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
DEER
Дата 5.5.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Цитата(LSD @ 4.5.2006,  23:14)
А вот так не сработает?
Код
select T1.ID1, T1.NAME1, T2.NAME2
from TABLE1 T1, TABLE2 T2
where T1.TABLE2ID = T2.ID(+)

клёва.
Это оказывается и есть правое и левое соединение  smile 

Это я только щас узнал 


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
LSD
Дата 5.5.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(DEER @  5.5.2006,  10:59 Найти цитируемый пост)
клёва.
Это оказывается и есть правое и левое соединение

Именно это я имел в виду когда писал:
Цитата(LSD @  2.5.2006,  23:12 Найти цитируемый пост)
Там у них просто был особый синтаксис для join-ов: (+), проверь.

 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




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


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

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