A表是基础表,a1和a2不重复判断A表记录的唯一性
1.更新表A,如a1=b1,a2=b2,则更新a3=b3
2.如a1=b1,但a2<>b2 则B的这条记录视作新记录插入到A,
3.将B.b1不在A.a1里的数据插入到A A表
a1 a2 a3
1000 20090101 13
1000 20090102 16
1001 20090101 15
B表
b1 b2 b3
1000 20090101 13
1000 20090102 15
1000 20090103 12
1001 20090101 13
1001 20090301 11
1002 20080901 18
结果表
a1 a2 a3
1000 20090101 13
1000 20090102 15
1001 20090101 13
1001 20090301 11
1002 20080901 18谢谢
1.更新表A,如a1=b1,a2=b2,则更新a3=b3
2.如a1=b1,但a2<>b2 则B的这条记录视作新记录插入到A,
3.将B.b1不在A.a1里的数据插入到A A表
a1 a2 a3
1000 20090101 13
1000 20090102 16
1001 20090101 15
B表
b1 b2 b3
1000 20090101 13
1000 20090102 15
1000 20090103 12
1001 20090101 13
1001 20090301 11
1002 20080901 18
结果表
a1 a2 a3
1000 20090101 13
1000 20090102 15
1001 20090101 13
1001 20090301 11
1002 20080901 18谢谢
解决方案 »
- 利用数据库绘制历史信息图表遇到问题
- [^_^]大家来帮忙,SQL SERVER2000转到2005的问题!
- 大侠们,急解决!!!怎么把excel表里的数据导入到数据库的某张表里去?
- 【问高手】SQLServer怎么配置像mysql那样的master/slave全同步?
- 想了很久都没能想到一个好的SQL语句。。。。。。。。。。。。。。。。。。
- 关于通过存储过程 跨数据库访问权限
- 请问客户端动态加入一个字段怎么加??
- 关于函数如何使用getdate等不确定内置函数
- 没人做过? 如何用让存储过程返回一个RECORDSET?
- 急问:如何读出SqlServer中对一个字段的描述
- 请教大家个改数据库大小的问题,在线等。。。。
- REFERENCES的 ON DELETE CASCADE
(SELECT * FROM A
UNION ALL
SELEC * FROM B )AS T1SELECT * FROM
#TB T WHERE NOT EXISTS(SELECT 1 FROM #TB WHERE T.A1=A1 AND T.A2=A2 AND T.A3>A3)
(SELECT * FROM A
UNION ALL
SELECT * FROM B )AS T1SELECT * FROM
#TB T WHERE NOT EXISTS(SELECT 1 FROM #TB WHERE T.A1=A1 AND T.A2=A2 AND T.A3>A3)SELECT 都打不对了!!!
1.更新表A,如a1=b1,a2=b2,则更新a3=b3
2.如a1=b1,但a2 <>b2 则B的这条记录视作新记录插入到A
3.a3是随时变化的。T.A3>A3没有意义。
declare @t1 table(a1 int,a2 int,a3 int)
insert @t1
select 1000,20090101,13 union all
select 1000,20090102,16 union all
select 1001,20090101,15declare @t2 table(b1 int,b2 int,b3 int)
insert @t2
select 1000,20090101,13 union all
select 1000,20090102,15 union all
select 1000,20090103,12 union all
select 1001,20090101,13 union all
select 1001,20090301,11 union all
select 1002,20080901,18update @t1 set a3=b3 from @t2 where a1=b1 and a2=b2
insert into @t1(a1,a2,a3)
select b1,b2,b3 from @t2 inner join @t1 on a1=b1 where a2<>b2
insert into @t1(a1,a2,a3)
select b1,b2,b3 from @t2,@t1 where a1<>b1select distinct a1,a2,a3 from @t1
A,B,结果表是我举例,实际A表有2000多条记录,B表数据有一百多条且每天是动态变化的。
-- 如果 a1 = b1, a2 = b2, 用b3去更新a3
update A set
a3 = b3
from A表 as A, B表 as b
where A.a1 = b.b1 and
A.a2 = b.b2-- 如果 B表左连接A表, 只要不满足a1 = b1 and a2 = b2的条件, 都将记录插入到A表
-- 在这里, 第二个条与第三个条件其实是一体的,
insert into A表
select b.*
from B表 as b
left join A表 as A
on b.b1 = a.a1 and
b.b2 = a.a2
where A.a1 is null
我的A表有8个字段,B表是创建的临时表,有三十多个字段,且B表b1,b2有可能出现重复,只是b3不同。出现重复会出现什么情况,还需进行验证。
我的顶贴的结果表有误,少了一行记录1000 20090103 12,这行是应该作为新记录插入到A表的。