请教一个SQL,关于多表连接

dejoy 2006-07-03 03:33:11
有一表A
ID F1 F2
1 7 2
2 4 5
另一表B
ID F3 F4
1 1 3
4 2 1
要求返回
ID F1 F2 F3 F4
1 7 2 1 3
2 4 5 0 0
4 0 0 2 1
即:只要A或B表中有的行都要返回,如果同时A表和B表都有的则合并(A表和B表中除了ID,没有同名重复字段)
...全文
514 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
maip 2006-07-05
  • 打赏
  • 举报
回复
不错,收藏
dejoy 2006-07-03
  • 打赏
  • 举报
回复
邹大 你的性欲真高啊 竟然达到了673!~
paoluo 2006-07-03
  • 打赏
  • 举报
回复
第二個多了一個union,會影響效率,所以第一個更優點。
zjcxc 2006-07-03
  • 打赏
  • 举报
回复
一般是第1种方法效率高, 第2种方法要多一些处理步骤 .
dejoy 2006-07-03
  • 打赏
  • 举报
回复
诚心请教zjcxc(邹建) 两种方法的效率对比?
羽毛之家 2006-07-03
  • 打赏
  • 举报
回复
今年是高手群英会!学习学习!!!!
paoluo 2006-07-03
  • 打赏
  • 举报
回复
用FULL JOIN的效率應該更高
dejoy 2006-07-03
  • 打赏
  • 举报
回复
看来有两种方法,一个是Full Join ,一个是Union + group ,不知道两种方法那个效率高些?
因为我的数据量比较大,A表和B表都有十多个字段,记录有十几万条。
LouisXIV 2006-07-03
  • 打赏
  • 举报
回复
忘了,用Full Join^^;

Inner写习惯了
dejoy 2006-07-03
  • 打赏
  • 举报
回复
哇哇 这么多钻石级别的高手啊
paoluo 2006-07-03
  • 打赏
  • 举报
回复
LouisXIV(夜游神) ( ) 信誉:100 2006-07-03 15:42:00 得分: 0


select a.ID,isnull(a.F1,0),isnull(a.F2,0),isnull(b.F3,0),isnull(b.F4,0)
from A inner join B
on A.ID=B.ID


------------------
用INNER JOIN就不對了
paoluo 2006-07-03
  • 打赏
  • 举报
回复
Create Table A
(ID Int,
F1 Int,
F2 Int)
Insert A Select 1, 7, 2
Union All Select 2, 4, 5

Create Table B
(ID Int,
F3 Int,
F4 Int)
Insert B Select 1, 1, 3
Union All Select 4, 2, 1
GO
Select
IsNull(A.ID,B.ID) As ID,
IsNull(F1,0) As F1,
IsNull(F2,0) As F2,
IsNull(F3,0) As F3,
IsNull(F4,0) As F4
From A
Full Outer Join B
On A.ID=B.ID
GO
Drop Table A,B

--Result
/*
ID F1 F2 F3 F4
1 7 2 1 3
4 0 0 2 1
2 4 5 0 0
*/
LouisXIV 2006-07-03
  • 打赏
  • 举报
回复
select a.ID,isnull(a.F1,0),isnull(a.F2,0),isnull(b.F3,0),isnull(b.F4,0)
from A inner join B
on A.ID=B.ID
zjcxc 2006-07-03
  • 打赏
  • 举报
回复
--或:
SELECT ID, F1 = SUM(F1), F2= SUM(F2), F2= SUM(F3), F2= SUM(F4)
FROM(
SELECT ID, F1, F2, F3 = 0, F4 = 0 FROM A
UNION ALL
SELECT ID, F1 = 0, F2 = 0, F3, F4 FROM B
)A
GROUP BY ID
paoluo 2006-07-03
  • 打赏
  • 举报
回复
慢了好多
paoluo 2006-07-03
  • 打赏
  • 举报
回复

Select
IsNull(A.ID,B.ID) As ID,
IsNull(F1,0) As F1,
IsNull(F2,0) As F2,
IsNull(F3,0) As F3,
IsNull(F4,0) As F4
From A
Full Join B
On A.ID=B.ID
LiBin_OberthurCS 2006-07-03
  • 打赏
  • 举报
回复
select
isnull(A.ID,b.ID),isnull(A.F1,0),isnull(A.F2,0),isnull(B.F3,0),isnull(B.F4,0)
from
A
full outer join
B
on
A.ID=B.ID
zjcxc 2006-07-03
  • 打赏
  • 举报
回复
-- 错了一点

SELECT ID = ISNULL(A.ID, B.ID),
F1 = ISNULL(A.F1, 0),
F2 = ISNULL(A.F2, 0),
F3 = ISNULL(B.F3, 0),
F4 = ISNULL(B.F4, 0)
FROM A
FULL JOIN B
ON A.ID = B.ID
zjcxc 2006-07-03
  • 打赏
  • 举报
回复
SELECT ID = ISNULL(A.ID, B.ID),
F1 = ISNULL(A.F1),
F2 = ISNULL(A.F2),
F3 = ISNULL(B.F3),
F4 = ISNULL(B.F4)
FROM A
FULL JOIN B
ON A.ID = B.ID

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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