环境:SQL2005
问题描述:
3表联查,组合3表字段,去掉重复字段,重新显示数据。试图显示。
具体实现:
table1列:a,b,c,d
table2列:a,e,f
table3列:b,c,g,h
每个表都有数据。
显示结果:
a b c d e f g h
x x x x null null null null
x null null null x x null null
null x x null null null x x谢谢,高分求问。。结贴追加分。
问题描述:
3表联查,组合3表字段,去掉重复字段,重新显示数据。试图显示。
具体实现:
table1列:a,b,c,d
table2列:a,e,f
table3列:b,c,g,h
每个表都有数据。
显示结果:
a b c d e f g h
x x x x null null null null
x null null null x x null null
null x x null null null x x谢谢,高分求问。。结贴追加分。
declare @t2 table(a nvarchar(10),e nvarchar(10),f nvarchar(10))
declare @t3 table(b nvarchar(10),c nvarchar(10),g nvarchar(10),h nvarchar(10))
insert @t1
select '1','2','3','4'
union all
select '2','1','3','4'
union all
select '3','2','3','4'
insert @t2
select '1','2','3'
union all
select '2','1','3'
insert @t3
select '2','3','4','1'
union all
select '2','1','3','4'
union all
select '3','2','3','4'select * from
@t1 t1
full join @t2 t2 on t1.a = t2.a
full join @t3 t3 on t1.b= t3.b and t1.c= t3.c
/*
a b c d a e f b c g h
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
1 2 3 4 1 2 3 2 3 4 1
2 1 3 4 2 1 3 NULL NULL NULL NULL
3 2 3 4 NULL NULL NULL 2 3 4 1
NULL NULL NULL NULL NULL NULL NULL 2 1 3 4
NULL NULL NULL NULL NULL NULL NULL 3 2 3 4
*/
吃饭了....
from table1 a ,table2 b, table3 c
where a.a = b.a and a.b = c.b and a.c = c.cselect m.* , g, h from
(select a.* , e , f from table1 a ,table2 b where a.a = b.a) m , table3 c
where m.b = c.b and m.c = c.c
最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
看来用full join
table1有a列:
1
2
3
table2也有a列:
4
5
6
想要a列的结果?
select * from table1
列 :a b c d
数据:1 2 3 4
select * from table2
列 : a e f
数据:5 6 7
select * from table3
列: b c g h
数据:8 9 10 0最后要的结果是a b c d e f g h
1 2 3 4 null null null null
5 null null null 6 7 null null
null 8 9 null null null 10 0
如果没有值的情况下使用ISNULL就可以了.declare @t1 table(a nvarchar(10),b nvarchar(10),c nvarchar(10),d nvarchar(10))
declare @t2 table(a nvarchar(10),e nvarchar(10),f nvarchar(10))
declare @t3 table(b nvarchar(10),c nvarchar(10),g nvarchar(10),h nvarchar(10))
insert @t1
select '1','2','3','4'
insert @t2
select '5','6','7'
insert @t3
select '8','9','10','0'select ISNULL(t1.a,t2.a) a, ISNULL(t1.b,t3.b) b ,ISNULL(t1.c,t3.c) c,d,e,f,g,h from
@t1 t1
full join @t2 t2 on t1.a = t2.a
full join @t3 t3 on t1.b= t3.b and t1.c= t3.c
/*
a b c d e f g h
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
1 2 3 4 NULL NULL NULL NULL
5 NULL NULL NULL 6 7 NULL NULL
NULL 8 9 NULL NULL NULL 10 0
*/