アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるカラムに同じ値を持つレコードの2件目以降を削除するSQLを教えて下さい。

例)
テーブル名:T
キーカラム名:K
同じ値を持つかチェックするカラム名:S

SELECT K,S FROM T;

K S
----
1 a
2 b
3 b
4 c
5 d
6 e
7 e

上記の場合、K=2または3と、K=6または7の2レコードを削除したい。

A 回答 (3件)

使用しているデータベースの製品によって書き方が変わります。


データベースがわからないと回答できません。
    • good
    • 0

2件目以降とはどういう条件で判断するのでしょうか。



>K=2または3と、K=6または7
とありますが、Sが重複しているレコードのうちどれでもいいということですか?

とりあえず、Sが重複していてKが一番小さいレコードのみを残すSQLであれば

delete from T a
where exists (
select * from T b
where a.S = b.S
and a.K > b.K);

という感じになると思います。
提示のデータであれば、Kが3、7のレコードを削除します。

やりたいことと違うようであれば、もう少し具体的に条件を提示してください。
    • good
    • 0
この回答へのお礼

お礼が遅くなり失礼しました。ご回答いただいたSQLを実際に実行し、「exists」の解説を調べ理解できました。ありがとうございました。

お礼日時:2011/08/21 17:34

delete from T


where exists
( select 1 from T T2
where T.K>T2.K
and T.S=T2.S )
    • good
    • 0
この回答へのお礼

お礼が遅くなり失礼しました。ご回答いただいたSQLを実際に実行し、「exists」の解説を調べ理解できました。ありがとうございました。

お礼日時:2011/08/21 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す