我想删除从select语句返回的表的行。
以下是一个不起作用的简化示例。
declare @t1 table(a int, b int, c int)
insert into @t1(a,b,c) select 1, 10, 1
insert into @t1(a,b,c) select 1, 5, 2
select ta.a, ta.b, ta.c
from @t1 ta
join @t1 tb on ta.a = tb.a
where ta.c < tb.c
delete from @t1
where exists (select ta.a, ta.b, ta.c
from @t1 ta
join @t1 tb on ta.a = tb.a
where ta.c < tb.c)
select * from @t1
以下是输出,您可以看到select只选择一行,但删除删除所有内容
答案 0 :(得分:4)
问题在于您正在使用EXISTS
。
EXISTS
仅评估是否存在结果,并且由于您的语句正在返回记录,您实际上是在说:DELETE @T1 WHERE (TRUE)
请尝试使用此代码:
Delete ta
From @t1 ta
Join @t1 tb On ta.a = tb.a
Where ta.c < tb.c