次のクエリは、オラクルで重複する行を削除するためにうまく機能しませんか?
SQL> delete from sessions o
where 1<=(select count(*)
from sessions i
where i.id!=o.id
and o.data=i.data);
重複行をすべて削除するようです!! (1はタフにしたい)
テーブルに少なくとも 1 つの行があり、2 つID
の異なる が に対して同じ値を共有しているため、ステートメントは機能しませんDATA
。
あなたの意図DATA
ID
はbyの異なる値を探すことかもしれませんがID
、SQL が言ってDATA
いることは実際にはセットベースです: 「私のテーブル全体を見てください。ID
が異なる場合 (つまり、内部COUNT(*)
が 0 より大きい場合)、DELETE
テーブル内のすべての行が異なります。」
特定の行ベースのロジックを試みている可能性がありますが、ステートメントは全体像 (セットベース) です。たとえば、Ollie がリンクしているソリューションにあるように、重複する行を特定するものは何もありません。