作者tbstien (潜心修行 明心见性)
看板Database
标题Re: [SQL ] 请教删除重复资料(SQL Server)
时间Wed May 7 22:43:16 2008
: 请问各位高手目前手上我有两个资料表
: 资料表一 资料表二
: ID ADDR ID ADDR
: ----------- -----------
: AAA 123456 BBB 123456
: BBB 123456 CCC 45689
: DDD 123456 FFF 56389
: GGG 45689 HHH 8921
: CCC 123457 BBB 567
: . . . .
: . . . .
: . . . .
: 目前我想要把资料表一的资料如果在资料表二中有出现的(ID 跟 ADDR完全一样的)
: 删除....
: 请问要如何要下语法....
: 用select筛选出来是会了...可是要删除语法却迟迟想不出来实在很头疼!!
: 希望版友们能指点一下...在此先感谢各位帮忙!!!
原本我的想法,原po推文1楼的大大想法一样
但是,想到资料表一的id、addr要在资料表二中一样才能删除
所以,以原po一楼的作法来看,会发生有误
因为少一个addr的判断
就资料表二来看,id=bbb有2个,但addr却是不同值
意思看在资料表一,假如资料表一也有id=bbb有2个,如下
id addr
------------
BBB 123456
BBB 567567
但以原po一楼的指令来作的话,此2笔资料均会被删除
因只判断id=BBB就删除,却无判断到addr的值
所以,小弟的方法是这样,也请有经验的大大看看此方法如何
这方法应该很笨
delete from 资料表一
where 资料表一.id in
(select 资料表一.id
from 资料表一,资料表二
where 资料表一.id=资料表二.id and 资料表一.addr=资料表二.addr)
and 资料表一.addr in
(select 资料表一.addr
from 资料表一,资料表二
where 资料表一.id=资料表二.id and 资料表一.addr=资料表二.addr)
这样一来,资料表一会被删除的资料就只有id=bbb ,addr=123456此单一笔资料了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.163.40.92
1F:推 regionbbs:像这种就用 cursor 来做,会单纯很多 05/07 22:57
2F:→ tbstien:cursor小弟不太会用,可否请1楼大指点呢? 05/07 23:09
3F:→ tbstien:r大,您先不要跟小弟说好了.先让我想一想怎麽用此方法.THX 05/07 23:26