テーブルA、テーブルBがあってデータ更新の効率的な方法を探しています。
フィールドはそれぞれ、コード、名前、誕生日 があって、
データ、
-----------------------------
A コードなし 名前誕生日
Bコードあり 名前誕生日
でテーブルAに、テーブルBから名前と誕生日で一致するコードを検索
してテーブルAのコードに書き込みたい。
SQL、もしくはストアドプロシジャーで処理したいと思ってます。
処理件数は500前後です。
ストアドを試してみたのですが、コンパイル・エラーが出て上手くいきません。アドバイスをお願いします。
No.3ベストアンサー
- 回答日時:
>この場合、TAROの小さい方のコードを拾いたいです。
それでは、
update a set
code = (select min(b.code)
from b
where a.name = b.name
and a.birth = b.birth)
これでどうでしょうか?
上手くいきました。
データ更新のため、phpでバッチを組んでいます。
以前はデータを1件づつ更新していてかなり時間がかかっていました。
こちらのSQLを利用すると450件ほどのデータ更新に35秒くらいと高速になりました。
またプログラムもシンプルに出来たのがうれしいです。
ありがとうございました。
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 のコードって どうします??
この回答への補足
この場合、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関数を使用してください。
この回答への補足
アドバイスありがとうございます。
試してみたのですが、
エラー行: 2: エラーが発生しました。
ORA-01427: 単一行副問合せにより2つ以上の行が返されます。
と、エラーが出てしまいます。
レコード数は、
テーブルAが、400
テーブルBが、20000
と異なります。
Accessの更新クエリなどを使えば問題なく出来るので、クエリをオラクルのSQLなどに一発変換出来れば簡単なのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
PLSQLの識別子エラー
-
重複するキーから一番古い年月...
-
2つのテーブルから条件に一致...
-
Accessユニオンクエリーで2つ...
-
ACCESS 一つのフィールドに複...
-
副問い合わせでのNULLの抽出方法
-
SQL 2つのテーブルとSUBSTRING...
-
ACCESS 検索について
-
【Access】順位を付けたい
-
アクセスのリレーションシップ
-
SQL文のCOUNTについて
-
Accessリレーションシップ
-
Access97で数値型からテキスト...
-
accessのエクスポートエラーに...
-
エクセルでテーブルの最終行が...
-
コンボボックスで入力したもの...
-
ACCESSのSQLで、NULLかNULLでな...
-
3つ以上のテーブルをUNIONする...
-
ビューで引数を使いたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
2つのテーブルから条件に一致...
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
主キーの変更
-
PLSQLの識別子エラー
-
ACCESSのコンパイルエラーについて
-
Accessでフィールドを比較した...
-
Inner join と Left joinの明...
-
続.ORACLEのSELECTのソートに...
-
片方だけ抽出する方法(SQL)
-
accessで移動平均する方法
-
SQL 2つのテーブルとSUBSTRING...
-
商品コード番号を入力すると商...
-
Accessユニオンクエリーで2つ...
-
発注テーブルの発注残数を納品...
-
請求と入金のテーブルの作成の...
-
下記のsqlで取得されるレコード...
-
日報計算
おすすめ情報