2010-05-31 7 views
0

Привет друзья я имею проблемы в объединении двух таблиц в оракула мои две таблицы приведены нижеприсоединение таблице оракула

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

Мы присоединяемся асимметричные записей наборов, используя 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 которых другая таблица не хватает, мы можем использовать полное объединение для получения значений с обеих сторон:

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> 
+0

Хай другу спасибо за помощь, но что я могу сделать, когда я имею более затем два столбца такого типа, как «Ян, Фаб, Мар, Апр ..., ..., Дек» до декабря, как я могу решить такую ​​проблему? – Deven

+0

@Deven - идеальным решением было бы получить дизайн схемы, который не был бы со мной! Но я знаю, как это происходит, мы должны работать с тем, что мы дали: (Нет ничего, что могло бы помешать вам использовать FULL OUTER JOIN на двенадцати таблицах. Однако производительность, вероятно, пострадает, если в ваших таблицах много строк, поскольку оптимизатор, скорее всего, для полного сканирования по всем столам. – APC

1

на основе выборочных данных, приведенных в этом вопросе, я думаю, что у вас есть некоторые записи только существуют в любом 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 присоединяется см Wikipedia article

Смежные вопросы