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