一个关于两表之间的查询问题-----有点难度的问题,急! (50分)

  • 主题发起人 主题发起人 mo
  • 开始时间 开始时间
M

mo

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:SQL SERVER
表1:T1
m1 m2 m3 m4
a s k d
s f j l
a a a b
表2:T2
m1 m2 m3 m4
s f j l
s s s s
a a a b
x x x x

问题:要将T2表中的记录增加到T1表中(条件:T1表不含有此条记录)

谢谢!





 
如果t2表与t1表的结构完全相同:
用tbatchmove控件可以实现把t2表中的内容导入到t1表中

如果t2表与t1表的结构不完全相同:
只有根据t2表的内容生成sql语句把记录插入到t1表中
 
》要将T2表中的记录增加到T1表中(条件:T1表不含有此条记录)
不知道你的表中有关键字吗?
根据比较关键字就可以将T2中的T1表不含有的记录增加到T1表中
比较笨的方法是:用T2表的记录做循环,在循环中查找T1中是否包含此记录,如不包含,则插入记录

听听其他意见!
 
TO:bianlx
tbatchmove不行的我用的是存储过程:)
TO:jrq
只有主键是自增量字段
TO:ALL
各位大侠快发表高见吧,要救火的啊
谢谢了:)




 
》》T1表不含有此条记录
我咂知道是不是包涵了!光一个子自增字段咂判断!
 
TO:完颜康
就是因为这样所以才难了,若有个关键字什么的那就好办了
 
实验一下,也许可以。
insert into t1(m1,m2,m3,m4)
Select m1,m2,m3,m4 from t2 a,t1 b
where a.m1<>b.m1 or a.m2<>b.m2 or a.m3<>b.m3 or a.m4<>b.m4
 
select distinct m1,m2,m3,m4 from
(select m1,m2,m3,m4 from t1 union all select m1,m2,m3,m4 from t2)
生成临时表,然后把T1清空,添加进去


 
可以将T1中的纪录加入到T2中
insert into T2 select * from T1
这时T2中有重复的值,
把T1清空
delete from T1
把T2中的纪录加到T1中
insert into T1 select * from T2 group by m1,m2,m3,m4
 
TO:yzhshi
你的办法有BUG的,我以前也是这么做的
TO:ugvanxk,structer
不知你们的办法的速度跟jrq的办法(用T2表的记录做循环),哪种快?
 
怎么没人答了?
 
我曾经做过一个
insert into t1(m1,m2,m3,m4)
Select m1,m2,m3,m4 from t2 a,t1 b
where (a.m1<>b.m1) and (a.m2<>b.m2) and (a.m3<>b.m3) and (a.m4<>b.m4)
 
同意楼上,我也是这样做的
 
TO:ctx62,ting__ting
真的不行啊,我又试了一次了
select * from t1
id m1 m2 m3 sl dw
1 a a a 71 s
2 s s s 10 pcs
3 khm xh a 45 pcs

select * from t2

id m1 m2 m3 sl dw
1 s s s 2 pcs
2 a a a 30 pnl
3 a s s 121 pcs

-> 注意:问题来了
select b.m1,b.m2 ,b.m3,b.sl,b.dw
from t1 a , t2 b
where (a.m1<>b.m1) and (a.m2<>b.m2) and (a.m3<>b.m3)
运行结果为:
m1 m2 m3 sl dw
s s s 2 pcs
s s s 2 pcs
a a a 30 pnl
a s s 121 pcs

为什么会这样呢?
我要的结果应该是:
m1 m2 m3 sl dw
a s s 121 pcs
才对的啊



 
还是我自己来UP一下
 
实现这个问题肯定有多种方式,这要看你的应用环境。
1、那几个字段的类型是什么?
2、数据量有多少行?
3、对运行效率的要求?(是一种一次性的批处理,还是要经常、实时的运行?)
 
最简单的一种:

select b.m1,b.m2,b.m3 from b
where not exists
(select null from a where a.m1=b.m1 and a.m2=b.m2 and a.m3=b.m3)
你试试看。
 
同意qixiaobin。
 
试一下
insert into t1 select * from t2 where not exists (select * from t1)
 
后退
顶部