• ベストアンサー

データの更新について

csvなどのテキストファイルからデータを取り込んで会員テーブルに更新するSQLを作成したくて考えています。 csvファイル 項目1:会員コード 項目2:名称 項目3:電話番号 いいやり方ではないと思いますがうまくいった方法を以下に書きます。 (1)ワークテーブル作成(csvと同じ項目) テーブル名:ワーク会員 項目1:会員コード 項目2:名称 項目3:電話番号 (2)UPDATE文実行 update 会員 K1 set 名称 = (select K2.名称 from ワーク会員 K2 where K2.会員コード = K1.会員コード), 電話番号 = (select K3.電話番号 from ワーク会員 K3 where K3.会員コード = K1.会員コード) where K1.会員コード IN (select 会員コード from ワーク会員 ) ブサイクな方法でしょうか? 他にもっといい方法があればアドバイスお願いします。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

update 会員 K1 set (名称,電話番号) = (select K2.名称, K2.電話番号 from ワーク会員 K2 where K2.会員コード = K1.会員コード), where K1.会員コード IN (select 会員コード from ワーク会員 ) #Oracleオンリーですので。

toshi_200578
質問者

お礼

自分の方法より全然きれいですね。 ありがとうございます。 参考にさせて頂きます。

その他の回答 (1)

回答No.2

オラクルのバージョンが判りませんので、使えるかどうか判りませんが.. >(1)ワークテーブル作成(csvと同じ項目) 9i以降の機能ですが、外部表というテーブルを作ることで、ワークテーブルを用いずに、 直にCSVテキストファイルをSQL文での問い合わせに使用できます。 一度しか使わないデータであれば、ワークテーブルにロードするよりも合理的に処理できる 可能性が高いです。 >(2)UPDATE文実行 CSVテキストを外部表でアクセスする場合、索引がないので、更新SQLの際の記述によっては 合理的なアクセスがされないケースがあります。 ワークテーブルを経由する場合も索引が無い場合は同様です。 (更新する値を連れてくる”相関副問い合わせ”が全表アクセスになる場合があるから) これもオラクルのバージョンによりますが、”外部表”や”索引なしのワークテーブル”を基に プライマリキーのあるテーブルを更新するなら、”更新可能ビューに対する更新”を試行すると 処理効率的に良い結果を生むかも知れません。

toshi_200578
質問者

補足

説明が足りず、申し訳ありません。 バージョンはOracle9iです。 なにぶんまだ経験が浅いものでおっしゃる意味がなかなか理解できずにいますので質問させてください。 「直にCSVテキストファイルをSQL文での問い合わせ」 どのようなSQL文で対応できるのでしょうか? 「更新可能ビューに対する更新」 更新対象テーブルはプライマリキーはあります。が、 上記方法がわかりません。ご教授お願いします。

関連するQ&A