Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Левое внешнее соединение


Автор: DEER 2.5.2006, 10:15
Добрый день. Пусть есть две таблицы
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 по несколько раз.

как быть?
 

Автор: DEER 2.5.2006, 16:35
сделал так
Код
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) 

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

Автор: bas 2.5.2006, 16:51
Left Join 

Автор: LSD 2.5.2006, 22:12
Код
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-ов: (+), проверь. 

Автор: DEER 3.5.2006, 08:58
да с UNION тоже работает правильно.

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

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

Автор: jsa 5.5.2006, 04:59
Код

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

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

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

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

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

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

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)