Условия объединения таблиц

Sergant82
Дата: 10.11.2008 11:38:54
Помогите разобраться - есть 3 таблицы - А, В, С
Из таблицы А нужно выбрать все записи независимо от того есть ли связанные записи в таблице В.
Пишем запрос select * from A, B where A.a1 = B.b1 (+) Все прекрасно работает.
Затем нужно связать таблицу С с таблицей В.
Пишем запрос select * from A, B where A.a1 = B.b1 (+) and B.b2 = C.c2. В результате получаем только те записи из В которые соответсвуют записям в таблице А. Подскажите где я не прав?
Elic
Дата: 10.11.2008 11:50:00
Sergant82
Подскажите где я не прав?
Отсутствует второй outer-join
orawish
Дата: 10.11.2008 11:51:14
для начала - определитесь (на словесно-логическом уровне) с тем что-именно-вы-хотите-получить

есть вероятность, что вас устроит:
1) where A.a1 = B.b1 (+) and B.b2 (+) = C.c2

2) или же строгое соединение BC с последующим внешним соединением с А
Elic
Дата: 10.11.2008 11:54:43
orawish
1) where A.a1 = B.b1 (+) and B.b2 (+) = C.c2
ORA-01417
Sergant82
Дата: 10.11.2008 12:26:14
Elic
Sergant82
Подскажите где я не прав?
Отсутствует второй outer-join

ну так даже если там поставить (+) все равно не выведте все записи из A. Версия оракла 8.1.7
Elic
Дата: 10.11.2008 12:28:55
Sergant82
ну так даже если там поставить (+) все равно не выведте все записи из A.
Ставишь не там, не так, ...
RTFM
Sergant82
Дата: 10.11.2008 12:30:23
Elic,

А что не так в моем вопросе?
Sergant82
Дата: 10.11.2008 12:34:16
Понял к чему клоните. select * from a,(select * from b,c where b.d = c.d(+) ) z where z.y(+) = a.y
Так было и так не устраивает. Будем искать другие пути Всем пасиб
orawish
Дата: 10.11.2008 12:44:04
ORA-01417 гы..

ну я про это бормотал..
SQL> with a as (select level+0 n from dual connect by level < 5)
  2      ,b as (select level+1 n from dual connect by level < 5)
  3      ,c as (select level+2 n from dual connect by level < 5)
  4             select a.n a,b.n b,c.n c from a,b,c
  5              where a.n = b.n (+)
  6                and b.n = c.n (+)
  7              order by 1,2,3
  8  ;

         A          B          C
---------- ---------- ----------
         1
         2          2
         3          3          3
         4          4          4

SQL> with a as (select level+0 n from dual connect by level < 5)
  2      ,b as (select level+1 n from dual connect by level < 5)
  3      ,c as (select level+2 n from dual connect by level < 5)
  4             select a.n a,b.n b,c.n c from a,b,c
  5              where a.n (+) = b.n
  6                and b.n (+) = c.n
  7           order by 1,2,3
  8  ;

         A          B          C
---------- ---------- ----------
         3          3          3
         4          4          4
                    5          5
                               6

SQL> with a as (select level+0 n from dual connect by level < 5)
  2      ,b as (select level+1 n from dual connect by level < 5)
  3      ,c as (select level+2 n from dual connect by level < 5)
  4             select a.n a
  5                   ,bc.n b
  6                   ,bc.n c
  7               from a,(select b.n from b,c where b.n = c.n) bc
  8              where a.n = bc.n (+)
  9           order by a.n
 10  ;

         A          B          C
---------- ---------- ----------
         1
         2
         3          3          3
         4          4          4