这个如何删除呢?

wangxiao2008 2010-10-24 02:53:04
想留下t1里面id相同的记录只有一条,条件是关联t2,id相同留下t2中日期小的那个
t1
no id
aaa 1
bbb 2
ccc 1
ddd 2
eee 1
kkk 3
t2
date no id
20081009 aaa 1
20030201 bbb 2
20040306 ccc 1
20050102 ddd 2
20030608 eee 1
20060207 kkk 3

结果应该是t1:
no id
eee 1
bbb 2
kkk 3
...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-10-24
  • 打赏
  • 举报
回复
SELECT distinct t.* FROM #t1 t
INNER JOIN
(
SELECT * FROM #t2 t WHERE NOT EXISTS(SELECT NULL FROM #t2 WHERE t.id=id AND t.date>date)
)M
ON t.id=m.id AND t.no=m.no

no id
-------------------- --
eee 1
bbb 2
kkk 3

(3 row(s) affected)
SQL2088 2010-10-24
  • 打赏
  • 举报
回复
--> 测试数据: [t1]
if object_id('[t1]') is not null drop table [t1]
go
create table [t1] (no varchar(3),id int)
insert into [t1]
select 'aaa',1 union all
select 'bbb',2 union all
select 'ccc',1 union all
select 'ddd',2 union all
select 'eee',1 union all
select 'kkk',3
--> 测试数据: [t2]
if object_id('[t2]') is not null drop table [t2]
go
create table [t2] (date datetime,no varchar(3),id int)
insert into [t2]
select '20081009','aaa',1 union all
select '20030201','bbb',2 union all
select '20040306','ccc',1 union all
select '20050102','ddd',2 union all
select '20030608','eee',1 union all
select '20060207','kkk',3

delete a
from t1 a,t2 b
where a.id=b.id and a.no=b.no
and exists(select 1 from t2 where id=b.id and date<b.date)

select * from [t1]
no id
---- -----------
bbb 2
eee 1
kkk 3

(3 行受影响)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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