присоединение к столу оракула - PullRequest
0 голосов
/ 31 мая 2010

Привет, друзья! У меня возникла проблема при соединении двух таблиц в Oracle. Две таблицы показаны ниже

table1 выглядит как

 id    Name    Jan  
 7001  Deven   22 
 7002  Clause  55 
 7004  Monish  11 
 7010  Dipesh  55
 7070  Dipika  100

table2 выглядит как

  id      Name       Feb  
  7001    Deven      12 
  7002    Clause     15 
  7003    Nimesh     20 
  7004    Monish     21 
  7005    Ritesh     22 

Я хочу объединить эти две таблицы и хочу ответить, как показано ниже

table2 выглядит как

  id      Name      Jan   Feb  
  7001    Deven     22    12 
  7002    Clause    55    15 
  7003    Nimesh    -     20 
  7004    Monish    11    21 
  7005    Ritesh    -     22 
  7010    Dipesh    55    -
  7070    Dipika    100   -

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

Мы объединяем асимметричные наборы записей, используя синтаксис OUTER JOIN. LEFT JOIN предоставит результаты, которые вы хотите:

SQL> select t72.id
  2         , t72.name
  3         , t34.jan
  4         , t72.feb
  5  from t72
  6       left outer join t34
  7       on ( t72.id = t34.id)
  8  order by t72.id
  9  /

        ID NAME                        JAN        FEB
---------- -------------------- ---------- ----------
      7001 Deven                        22         12
      7002 Clause                       55         15
      7003 Nimesh                                  20
      7004 Monish                       11         21
      7005 Ritesh                                  22

SQL>

редактировать

Хочу заметить, что вы изменили пример данных, пока я запускал демонстрацию.

Когда в обеих таблицах есть значения ID, которых нет в другой таблице, мы можем использовать FULL JOIN для получения значений с обеих сторон:

SQL> select nvl(t72.id, t34.id) as id
  2         , nvl(t72.name, t34.name) as name
  3         , t34.jan
  4         , t72.feb
  5  from t72
  6       full outer join t34
  7       on ( t72.id = t34.id)
  8  order by t72.id
  9  /

        ID NAME                        JAN        FEB
---------- -------------------- ---------- ----------
      7001 Deven                        22         12
      7002 Clause                       55         15
      7003 Nimesh                                  20
      7004 Monish                       11         21
      7005 Ritesh                                  22
      7010 Dipesh                       55
      7070 Dipika                      100

7 rows selected.

SQL>
1 голос
/ 31 мая 2010

Основываясь на данных примера, приведенных в вопросе, я думаю, что у вас есть записи только в table1 или table2. Так что inner join не применимо. Пожалуйста, используйте full outer join следующим образом,

SELECT NVL(table1.id,table2.id), NVL2(table1.id,table1.name,table2.name), table1.jan, table2.feb 
FROM  table1
FULL OUTER JOIN table2 ON table1.id = table2.id

Подробнее о соединениях SQL см. Статья в Википедии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...