重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

下のようなテーブルでデータのメンテナンスを行いたいのですが、update,deleteを効率良く行う方法はありますでしょうか?


No カラムA カラムB カラムC カラムD 
----------------------------------------
1 aaa 111 あああ
2 aaa 222 いいい 123
3 aaa 333 ううう
4 aaa 444 えええ
5 aaa 555 おおお 456
6 bbb 222 いいい
7 bbb 333 ううう
8 bbb 555 おおお

カラムAが「aaa」のレコードと「bbb」のレコードがあり、カラムB,Cは一部のレコードが重複しています。


この状態から、
・No2のカラムDをNo6のカラムDにセット
・No5のカラムDをNo8のカラムDにセット
・No2,3,5のレコードを削除
したいのです。
※カラムB,Cが重複している場合、カラムAが「bbb」のレコードにカラムDの値を反映し、カラムAが「AAA」のレコードは削除したいです。

update,delete共に効率良く行う方法があれば、助かります。

初歩的な質問かも知れませんが、御教示いただけますと幸いです。

よろしくお願い致します。

A 回答 (1件)

効率良くというか、普通のupdate文・delete文ですが・・



update テーブル T1
set T1.カラムD = (select カラムD from テーブル T2 where T2.カラムA = 'aaa' and T1.カラムB = T2.カラムB and T1.カラムC = T2.カラムC)
where T1.カラムA = 'bbb'
and exists (
select * from テーブル T2 where T2.カラムA = 'aaa' and T1.カラムB = T2.カラムB and T1.カラムC = T2.カラムC
);

delete from テーブル T1
where T1.カラムA = 'aaa'
and exists (
select * from テーブル T2 where T2.カラムA = 'bbb' and T1.カラムB = T2.カラムB and T1.カラムC = T2.カラムC
);

こんな感じでどうでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事できました

お礼日時:2013/10/22 11:51

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