加入oracle表

时间:2010-05-31 08:28:52

标签: sql oracle join

嗨朋友我在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 

我想结合这两个表,并希望像bellow一样回答

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 个答案:

答案 0 :(得分: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值时,我们可以使用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 :(得分: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