データベースを使っていると、「複数のテーブルを使って条件に合致するレコードを一括で更新したい」という場面が必ず出てきます。そんな時に役立つのが「UPDATE JOIN」構文です。JOINといえばSELECT文で使うイメージが強いかもしれませんが、UPDATE文でもJOINを使えば非常に効率的なデータ操作が可能になります。
この記事では、MySQLにおけるUPDATE JOINの基本的な構文から、実践的な使用例、エラー時の対処法まで、初心者にもわかりやすく解説していきます。実務で使えるテクニックも紹介しますので、ぜひ最後までご覧ください。
MySQLのUPDATE JOINとは、UPDATE文にJOIN(INNER JOINやLEFT JOINなど)を組み合わせて、複数のテーブルを結合した上で更新処理を行うSQL文です。これにより、サブクエリを使わずにスマートなデータ更新が可能になります。
一般的なUPDATE文は単一のテーブルを対象にしますが、UPDATE JOINを使うことで、関連する別テーブルの情報を参照しながら、対象テーブルのレコードを効率的に更新できます。
以下がMySQLでのUPDATE JOINの基本構文です。
UPDATE テーブルA
JOIN テーブルB ON 条件
SET テーブルA.カラム = 値
WHERE 条件;
UPDATE products
JOIN categories ON products.category_id = categories.id
SET products.price = products.price * 1.1
WHERE categories.name = '電子機器';
このSQL文では、products
テーブルとcategories
テーブルを結合し、「電子機器」カテゴリの商品価格を10%アップしています。
UPDATE JOINでは、INNER JOINだけでなくLEFT JOINも使用できます。更新対象のレコード範囲に影響するため、それぞれの特性を理解しておきましょう。
UPDATE customers
JOIN orders ON customers.id = orders.customer_id
SET customers.status = 'active'
WHERE orders.order_date > '2025-01-01';
このSQLでは、2025年以降に注文があった顧客のステータスを「active」に変更しています。
UPDATE employees
JOIN departments ON employees.dept_id = departments.id
SET employees.salary = employees.salary + 10000
WHERE departments.name = '開発部';
開発部に所属する社員の給与を1万円増額する処理です。
複雑なJOINではテーブル名が長くなりがちなので、エイリアス(別名)を使うと読みやすくなります。
UPDATE emp AS e
JOIN dept AS d ON e.dept_id = d.id
SET e.salary = e.salary * 1.05
WHERE d.name = '営業部';
UPDATE JOINでは、WHERE句を入れないと全件更新される可能性があるため、条件指定は必須です。
-- 悪い例(全件更新)
UPDATE users
JOIN logs ON users.id = logs.user_id
SET users.status = 'inactive';
-- 良い例(条件指定あり)
UPDATE users
JOIN logs ON users.id = logs.user_id
SET users.status = 'inactive'
WHERE logs.last_login < '2024-01-01';
これはサブクエリで同一テーブルを使ってUPDATEしようとした際に発生します。JOINを使えば回避できます。
-- サブクエリを使うとエラーになる場合あり
UPDATE users
SET score = (SELECT MAX(score) FROM users);
-- JOINに置き換えることで回避
UPDATE users u1
JOIN (SELECT id, MAX(score) AS max_score FROM users GROUP BY id) u2 ON u1.id = u2.id
SET u1.score = u2.max_score;
START TRANSACTION
とROLLBACK
を組み合わせると安全です。MySQLのUPDATE JOINは、複数テーブルを参照しながら効率よくデータ更新を行うための強力なテクニックです。構文自体はシンプルですが、実際の業務ではJOIN条件やWHERE句のミスで予期せぬ更新が発生することもあります。
そのため、本記事で紹介した基本構文や注意点を踏まえながら、テスト環境で検証してから本番で実行することをおすすめします。JOINを自在に使いこなせば、あなたのSQLスキルは確実にワンランクアップするはずです。