sql server 2008,A、B两张表结构相同,都有列AA、BB,想以A表AA列为根,A表AA列所没有的行,而B表中AA列有,则合并入A表,求语句

oiph 2013-11-25 10:43:37
A表

AA BB
12345-01279 南庄村
12300-88877 山西镇
33344-00011 阿村


B表
AA BB
12345-01279 南庄村
12300-88877 天山
12009-77000 上风寨
74822-33311 一平沟

经合并后,原A表的内容变成
AA BB
12345-01279 南庄村
12300-88877 山西镇
33344-00011 阿村
12009-77000 上风寨
74822-33311 一平沟

(注:A表与B表当AA列内容相同时,所对应的BB列内容不一定相同)
谢谢!

...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
修改一下:


;with A(AA,BB)
as
(
select '12345-01279',        '南庄村'
union all select '12300-88877',        '山西镇'
union all select '33344-00011',        '阿村'
),

B(aa,bb)
as
(
select '12345-01279',        '南庄村'
union all select '12300-88877',        '天山'
union all select '12009-77000',        '上风寨'
union all select '74822-33311',        '一平沟'
)


select aa,bb from A
union 
select aa,bb from B
where not exists(select 1 from a where a.AA = b.aa)
order by 
/*
aa	         bb
12009-77000	上风寨
12300-88877	山西镇
12345-01279	南庄村
33344-00011	阿村
74822-33311	一平沟
*/
  • 打赏
  • 举报
回复
这样就好了,你试试:
select aa,bb from A
union 
select aa,bb from B
發糞塗牆 2013-11-25
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-11-25 10:54:55
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
--	Dec 28 2012 20:23:12 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([AA] varchar(11),[BB] varchar(6))
insert [A]
select '12345-01279','南庄村' union all
select '12300-88877','山西镇' union all
select '33344-00011','阿村'
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([AA] varchar(11),[BB] varchar(6))
insert [B]
select '12345-01279','南庄村' union all
select '12300-88877','天山' union all
select '12009-77000','上风寨' union all
select '74822-33311','一平沟'
--------------开始查询--------------------------
SELECT * FROM a
UNION ALL 
SELECT * FROM B
WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.aa=b.aa)


----------------结果----------------------------
/* 
AA          BB
----------- ------
12345-01279 南庄村
12300-88877 山西镇
33344-00011 阿村
12009-77000 上风寨
74822-33311 一平沟
*/
IEEE_China 2013-11-25
  • 打赏
  • 举报
回复
额,没看结果
發糞塗牆 2013-11-25
  • 打赏
  • 举报
回复
2008的话用except也行
IEEE_China 2013-11-25
  • 打赏
  • 举报
回复

select b.aa as baa,b.bb as bbb,a.aa as aaa,a.bb as abb
from b 
left join a
on b.aa=b.aa
xxfvba 2013-11-25
  • 打赏
  • 举报
回复
select AA,BB from A union all select AA,BB from B where not exists (select * from A where A.AA=B.AA)

27,579

社区成员

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

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