[解決済み] MySQLのあるテーブルを別のテーブルの値で更新する
質問
ある MySQL テーブルを、別のテーブルからの情報に基づいて更新しようとしています。
私の
original
テーブルは次のようになります。
id | value
------------
1 | hello
2 | fortune
3 | my
4 | old
5 | friend
そして、その
tobeupdated
テーブルは次のようになります。
uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | | old
4 | | friend
5 | | fortune
を更新したい
id
で
tobeupdated
と共に
id
から
original
をベースに
value
(に格納されている文字列)。
VARCHAR(32)
フィールドに格納された文字列)。
更新されたテーブルは、うまくいけば次のようになります。
uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | 4 | old
4 | 5 | friend
5 | 2 | fortune
動作するクエリを持っていますが、非常に遅いです。
UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value
これはCPUを最大にし、最終的には更新のほんの一部しか実行されずにタイムアウトになります(マッチする値は数千個あります)。私は、マッチングを
value
でマッチングすると遅くなることは分かっていますが、これは私が持っている唯一のデータであり、それらを一緒にマッチングさせることができます。
このような値を更新する良い方法はありますか?もしその方が速いのであれば、マージされた結果のために3番目のテーブルを作成することができますか?
私は MySQL - 別のテーブルからの値でテーブルを更新するにはどうすればよいですか? を試してみましたが、それは本当に助けになりませんでした。何かアイデアはありますか?
MySQL 初心者を助けていただき、ありがとうございます。
どのように解決するのですか?
UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
これで、あなたのものと全く同じことができるはずです。しかし、私は複数の「WHERE」条件よりも「JOIN」構文の方が読みやすいと思います。
動作が遅いということですが、テーブルの大きさはどのくらいですか?インデックスを
tobeupdated.value
と
original.value
EDIT また、クエリを簡略化することができます。
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
USING
は、結合の両方のテーブルが同じ名前の
key
のように
id
つまり、等位結合
http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join
関連
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】MySQLで正規表現による置換を行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
SpringBootのMySQLへの接続は、バックエンドのインターフェイスの操作方法を書き込むためのデータを取得するために
-
MySQLで正規表現を使う 詳細
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み】マルチパート識別子をバインドできない
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
群関数解の無効な使用
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] どのトランザクションが「テーブルメタデータのロック待ち」状態を引き起こしているかを確認するにはどうすればよいですか?