Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Выборка из 3 таблиц


Автор: Fantaz1 5.11.2011, 20:32
Помогите создать запрос. Входящие таблицы и какой должен быть результат в прикрепленном файле.
Я уже как только не пробовал, не получается. Дошол до такого результата:
Код

SELECT    TableA.code,TableA.aname, TableB.bname, TableC.cname
FROM         TableA LEFT OUTER JOIN
                      TableC ON TableA.code = TableC.code LEFT OUTER JOIN
                      TableB ON TableA.code = TableB.code

Почти то, но поля bname и cname повторяются, а надо что б не повторялись, как выбрать уникальные значения со столбца, что то типо distinct только по конкретному столбцу

Автор: tzirechnoy 6.11.2011, 11:06
Простите, Вы о чём? В приведённом примере повторяются только значения NULL. 

И дажэ если решыть, что это Вам как-то мешает, то следует банальный вопрос: а что конкретно должно быть в полях code, aname, cname если, допустим, у нас в bname NULL (учитывая, что для каждого из этих полей есть по два логичных варианта).
эти? 

Автор: Fantaz1 6.11.2011, 11:18
В прикрепленном файле результат который должен быть а не тот который у меня получился

Автор: chip_and_dayl 6.11.2011, 11:56
То что  вы  хотите не  есть логичным

почему в результативной таблице следующие данные
...  bname       cname
...  aaa            xxx
...  bbb            yyy

а не
...  bname       cname
...  aaa            yyy
...  bbb            xxx
?

У   вас  нет уникальной связи между  Таблицей Б и Ц

Автор: Fantaz1 6.11.2011, 12:33
Такое задание... значит выход должен быть, хоть какой то

Автор: chip_and_dayl 6.11.2011, 17:10
Так а где собственно задание?

И в задание была описана структура таблиц?

Автор: Fantaz1 6.11.2011, 17:15
Задание это прикрепленный файл! Там структура трех таблиц, и результат который должен получится. Надо создать запрос который даст тот результат

Автор: Zloxa 7.11.2011, 09:38
Цитата(Fantaz1 @  6.11.2011,  12:33 Найти цитируемый пост)
хоть какой то 

Код

SQL> -- эмуляция исходных данных
SQL> with tableA as (
  2    select 1 code, 'Cat'aname from dual
  3    union all select 2 code, 'Dog'aname from dual
  4    union all select 3 code, 'Bird'aname from dual
  5  )
  6  ,tableB as(
  7    select 1 code, 'aaa' bname from dual
  8    union all select 1, 'bbb' from dual
  9    union all select 2, 'ccc' from dual
 10    union all select 2, 'ddd' from dual
 11  )
 12  ,tablec as(
 13    select 1 code, 'xxx' cname from dual
 14    union all select 1, 'yyy' from dual
 15    union all select 1, 'zzz' from dual
 16    union all select 2, 'www' from dual
 17  )
 18  -- запрос
 19  select a.code
 20         ,aname
 21         ,bname
 22         ,cname
 23  from (select row_number() over (partition by code order by bname) rn, b.* from tableB b) b
 24  full join (select row_number() over (partition by code order by cname) rn, c.* from tableC c) c on b.code = c.code and b.rn = c.rn
 25  right join tablea a on a.code = coalesce(b.code,c.code)
 26  ;
 
      CODE ANAME BNAME CNAME
---------- ----- ----- -----
         1 Cat   aaa   xxx
         1 Cat   bbb   yyy
         1 Cat         zzz
         2 Dog   ccc   www
         2 Dog   ddd   
         3 Bird        
 
6 rows selected
 

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