求一个很简单的SQL语句

godmouser 2009-06-09 03:20:44
有四个表,A/B/C/D,其结构相同,均有四个字段:a,b,c,d
现在要将数据合并成:
A.a A.b A.c A.d B.a B.b等等,不需要判断任何条件,只是加到后面就可以了!
如:
A:
a b
a1 b1
B:
a b
a2 b2
a7 b7
C:
a b
a3 b3
C:
a b
a4 b4
a5 b5
a6 b6
处理之后的结果为:
a b a b a b a b
a1 b1 a2 b2 a3 b3 a4 b4
a7 b7 a5 b5
a6 b6
...全文
37 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
godmouser 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pmmhjj 的回复:]
应该用full outer join
[/Quote]谢谢
pmmhjj 2009-06-09
  • 打赏
  • 举报
回复
应该用full outer join
pmmhjj 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 leo_lesley 的回复:]
select a.a,a.b,b.a,b.b,c.a,c.b,d.a,d.b
from #l4 d left join #l1 a on d.id = a.id
left join #l2 b on d.id = b.id
left join #l3 c on d.id = c.id
[/Quote]
实际中你根本不知道哪个表最长,做左外连接肯定会造成数据丢失。
leo_lesley 2009-06-09
  • 打赏
  • 举报
回复
declare @A table(a   varchar(2),   b  varchar(2))
insert @A
select 'a1','b1'

declare @B table(a varchar(2), b varchar(2))
insert @B
select 'a2','b2'
union
select 'a7','b7'

declare @C table(a varchar(2), b varchar(2))
insert @C
select 'a3','b3'

declare @D table(a varchar(2), b varchar(2))
insert @D
select 'a4','b4'
union
select 'a5','b5'
union
select 'a6','b6'



select id=identity(int,1,1),* into #l1 from @A
select id=identity(int,1,1),* into #l2 from @B
select id=identity(int,1,1),* into #l3 from @C
select id=identity(int,1,1),* into #l4 from @D


select a.a,a.b,b.a,b.b,c.a,c.b,d.a,d.b
from #l4 d left join #l1 a on d.id = a.id
left join #l2 b on d.id = b.id
left join #l3 c on d.id = c.id

drop table #l1,#l2,#l3,#l4

/* 结果
a b a b a b a b
---- ---- ---- ---- ---- ---- ---- ----
a1 b1 a2 b2 a3 b3 a4 b4
NULL NULL a7 b7 NULL NULL a5 b5
NULL NULL NULL NULL NULL NULL a6 b6

(3 row(s) affected)

*/
liping_ycit 2009-06-09
  • 打赏
  • 举报
回复
如果用外连接呢?
godmouser 2009-06-09
  • 打赏
  • 举报
回复
其实问这个问题也是下下策啊!实在是没办法搞出来了!所以就想了最笨的办法!
最终目的还是要解决下面的这个问题:
http://topic.csdn.net/u/20090609/14/62395a6e-3ceb-411c-8e77-2caeb04a0bcf.html?seed=2003122662
godmouser 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 FZF131 的回复:]
叉连接CROSS JOIN
[/Quote]也会有很多重复的数据的!
FZF131 2009-06-09
  • 打赏
  • 举报
回复
叉连接CROSS JOIN
godmouser 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyemoye 的回复:]
楼主这样的思想是错误的。你试试就知道了
[/Quote]我也知道这样的思想不太合理,但不知道可不可以实现呢?
godmouser 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouyemoye 的回复:]
select * from a,b,c,d where 0=0
[/Quote]
这样不行啊,会有很多重复的数据的!
zhouyemoye 2009-06-09
  • 打赏
  • 举报
回复
楼主这样的思想是错误的。你试试就知道了
zhouyemoye 2009-06-09
  • 打赏
  • 举报
回复
select * from a,b,c,d where 0=0
sdhdy 2009-06-09
  • 打赏
  • 举报
回复
不加任何条件,岂不成了交叉连接CROSS JOIN 了?

34,871

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧