テーブル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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
行方向のデータを横に並べる
-
SELECT時にカウントアップ
-
SQL 2つのテーブルとSUBSTRING...
-
商品コード番号を入力すると商...
-
Accessユニオンクエリーで2つ...
-
Sheet1$が存在致しませんとエラー
-
主キーの変更
-
3つのテーブルから条件に一致し...
-
社内コードをソースコードに直...
-
access初心者です。 アパレル...
-
下記のsqlで取得されるレコード...
-
Accessでフィールドを比較した...
-
SQLについて質問です。 テーブ...
-
ACCESS インポート時の重複チ...
-
片方だけ抽出する方法(SQL)
-
ACCESSのSQLで、NULLかNULLでな...
-
3つ以上のテーブルをUNIONする...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
PLSQLの識別子エラー
-
主キーの変更
-
Accessでフィールドを比較した...
-
SQL 2つのテーブルとSUBSTRING...
-
続.ORACLEのSELECTのソートに...
-
行方向のデータを横に並べる
-
下記のsqlで取得されるレコード...
-
VIEWでテーブルの集計結果...
-
update文で質問です。 下記の条...
-
[Oracle] UPDATE分の副問い合わ...
-
片方だけ抽出する方法(SQL)
-
自分自身への矢印
-
連番のMin, Maxを取得したい
-
Accessユニオンクエリーで2つ...
-
日付の最大値を検索条件にする方法
-
Inner join と Left joinの明...
おすすめ情報