这样的Sql 语句怎样完成?(50分)

  • 主题发起人 主题发起人 raider
  • 开始时间 开始时间
R

raider

Unregistered / Unconfirmed
GUEST, unregistred user!
比如现在有这么一张表
学号 部门
00001 abcd
00002 cdgd
00001 rtty
00002 dkdld
00001 fdfdf
...

我现在想根据这个表向一个有同样结构但是学号为主键的的表中添加数据。
如果数据库已经有这个学号 则遇到同名的学号,则不向表中插入。
怎样才能用简单的sql 语言完成这个功能呢?


 
要分成两个语句完成:
1.update table1 set bm = b.bm from table1 a,table2 b where a.xh=b.xh
2.insert into table1(xh,bm) (select xh,bm from table2 where xh not
in (select bm from table1));
 
为何不用Tbatch的appendupdate模式!
 
wuyi的方法可行.
 
我试了一下,好像不行!
 
insert into table1(xh,bm)
select xh,bm
from table2
where xh not in (select xh from table1)
 
不行! 我的sql 如下:
create table xytest
(xh char(3),
bm char(2)
)
insert xytest values ( '001', '1a')
insert xytest values ( '001', 'aa')
insert xytest values ( '002', 'bb')
insert xytest values ( '002', '2c')
insert xytest values ( '003', 'cn')

create table test
(xh char(3) primary key,
bm char(2)
)

insert into test
select xh, bm from xytest where xh not in (select xh from test)


从字面上理解,似乎是对的,但是实际不行! 我的要求只是在test表中插入
001,002,003中的随便一个数据.难道只能采用光标吗?清高收指点一二!

 

insert into test
select xh, bm from xytest where xh not in (select xh from test)

第一个select语句少了括号吧。

btw: 你的出错到底在哪一行,什么信息,用的是什么数据库?
 
to wuyi
我用的是sql server 7.0 如果只执行insert into 那两句则

系统的出错信息为:
Server: Msg 2627, Level 14, State 1,Line 1
Violation of PRIMARY KEY constraint 'PK__test__4316F928'. Cannot insert duplicate key in object 'test'.
The statement has been terminated.

如果第一个select 语句加( 则系统说
Server: Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'select'.

我们的系统要把以前的数据库(dbf)导入现在定义的sql数据库中.
字段名,长度都和现在的不一样,由于以前的库有不少重复纪录,
现在只要求一个采样数据就行了.数据量较大. 如何完成?多谢
 
多人接受答案了。
 
后退
顶部