2017-05-25 15 views
2

select文から返されるテーブルの行を削除します。where from exists(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 

は、あなたが選択は、単一の行を選択見ることができ、出力されますが、削除は、問題は、あなたが EXISTSを使用しているという事実であるすべてのもの

results

+1

あなたの内側の選択クエリは削除クエリにどのようにも結合されません。 – litelite

+0

@litelite私は、選択結果が結果として返された行を表示するために使用していました – TagJones

答えて

4

を削除します。

EXISTSは結果だけがすべてであったか否かを評価し、あなたの文は、レコードを返しているので、あなたは基本的に言っている:DELETE @T1 WHERE (TRUE)

ではなく、これを使用してみてください:

Delete ta 
From @t1 ta 
Join @t1 tb On ta.a = tb.a 
Where ta.c < tb.c 
関連する問題