• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL、ストアドでのUPDATEのアドバイスを下さい。)

効率的な方法でSQL、ストアドでのUPDATEを実行する方法を教えてください

このQ&Aのポイント
  • テーブルAとテーブルBのデータ更新を効率的に行う方法についてアドバイスをお願いします。テーブルAにはコード、名前、誕生日のフィールドがあり、テーブルBから名前と誕生日の一致するコードを検索し、テーブルAのコードに書き込みたいと思っています。処理件数は約500件です。
  • SQLまたはストアドプロシージャを使用して、テーブルAとテーブルBのデータ更新を効率的に行う方法についてアドバイスをお願いします。テーブルAにはコード、名前、誕生日のフィールドがあり、テーブルBから名前と誕生日の一致するコードを検索し、テーブルAのコードに書き込みたいと考えています。処理件数はおよそ500件です。
  • テーブルAとテーブルBのデータ更新を効率的に行う方法について教えてください。テーブルAにはコード、名前、誕生日のフィールドがあり、テーブルBから名前と誕生日の一致するコードを検索してテーブルAのコードに書き込みたいと考えています。処理件数は約500件です。SQLまたはストアドプロシージャを使用した処理方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>この場合、TAROの小さい方のコードを拾いたいです。 それでは、  update a set  code = (select min(b.code)  from b  where a.name = b.name  and a.birth = b.birth) これでどうでしょうか?

taaaaaaa
質問者

お礼

上手くいきました。 データ更新のため、phpでバッチを組んでいます。 以前はデータを1件づつ更新していてかなり時間がかかっていました。 こちらのSQLを利用すると450件ほどのデータ更新に35秒くらいと高速になりました。 またプログラムもシンプルに出来たのがうれしいです。 ありがとうございました。

その他の回答 (2)

回答No.2

>エラー行: 2: エラーが発生しました。 >ORA-01427: 単一行副問合せにより2つ以上の行が返されます。 ということは、テーブルBに 同じ名称で同じ誕生日の レコードが複数件存在するということが推測されますが。。 CODE NAME BIRTH ------------------------ AAAA TARO 2000/01/01 BBBB TARO 2000/01/01 CCCC JIRO 2000/12/10 DDDD SABURO 2000/12/31 このような場合は TARO のコードって どうします??

taaaaaaa
質問者

補足

この場合、TAROの小さい方のコードを拾いたいです。 AAAA ⇒ 10001 BBBB ⇒ 20001 コードはすべて4~5桁の数字です。

回答No.1

update a set code = (select b.code from b where a.name = b.name and a.birth = b.birth) a : テーブルA b : テーブルB code : コード フィールド name : 名前 フィールド birth : 誕生日 フィールド こんなカンジでどうでしょうか? 一致するものが存在しない場合は コードは null になりますので、それがイヤであれば nvl関数を使用してください。

taaaaaaa
質問者

補足

アドバイスありがとうございます。 試してみたのですが、 エラー行: 2: エラーが発生しました。 ORA-01427: 単一行副問合せにより2つ以上の行が返されます。 と、エラーが出てしまいます。 レコード数は、 テーブルAが、400 テーブルBが、20000 と異なります。 Accessの更新クエリなどを使えば問題なく出来るので、クエリをオラクルのSQLなどに一発変換出来れば簡単なのですが。。。

関連するQ&A