如何用数据库sql语句实现以下的两张表的连接呢?

有两张表,其中都有属性name,但是都有其他不同的另一个属性,如何构造sql语句使新建一张表能够实现同时显示一个name的另外两个属性?
举例如下,那么table_c应该怎么写呢?
table_a
name list_a
A 4
B 1
C 5
E 2

table_b
name list_b
B 5
D 1
E 2

然后构造成以下↓
table_c
name list_a list_b
A 4 0
B 1 5
C 5 0
D 0 1
E 2 2
还望高手提供该类的sql语句,感激不尽~

用全连接:full join, 效率比union高

SELECT NVL(A.name,B.name) AS NAME,NVL(A.list_a,0) AS list_a, 
NVL(B.list_b,0) AS list_b
FROM table_a A 
full join table_b B 
ON A.name=B.name

NVL作用,参数1为空时取参数2的值

望采纳,不懂可以问.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-20
昨天刚回答了一个这样的问题,用全外连接即可 ,语句已测试
select nvl(t1.name,t2.name) name,
nvl(list_a, 0) list_a,
nvl(list_b, 0) list_b from table_a t1 full join table_b t2 on t1.name = t2.name
order by nvl(t1.name,t2.name)追问

多谢你回答,不过确实下边这位先给我了主思路,还是很感谢你哈~~

第2个回答  2014-03-20
sele ct *from (
sele ct name,list_a ,0 list_b from table_a
uni on
sele ct name,0 ,list_b from table_b
)

试试看,祝你好运!追问

没能运行起来,不过还是多谢~

第3个回答  2014-03-20
SELECT X.NAME,NVL(TABLE_A.LIST,0) lista,NVL(TABLE_B.list,0) listb
FROM
(SELECT NAME FROM TABLE_A
UNION
SELECT NAME FROM TABLE_B) X,
TABLE_A,TABLE_B
WHERE X.NAME = TABLE_A.NAME(+)
AND
X.NAME = TABLE_B.NAME(+)
order by x.name;
——————————————————————————————
已测试,可实现追问

测试了一下,所得效果并不是所要求的数据,由于错误,我修改了一下,也可能是我改的有问题吧,嘿,不过还是很感谢你的回答。

追答

不能够啊,我测试过完全没问题啊,你用的是什么数据库,我是在oracle 10g环境下做的

追问

额 我跑的SQLServer~ 不过看思路应该都是正确的,我当时一时间没来得及把你的程序认真改成sqlserver的语句,不过还是很感谢你哈~~~~

第4个回答  2014-03-20
sql语句的
左外连接追问

嘿,多谢~~

相似回答