PR

【MySQL】複数テーブルを使用したINSERTやUPDATE

MySQL
記事内に広告が含まれています。

MySQLを利用していて、他のテーブルからデータを挿入したかったり、他のテーブルと結合して条件を絞って更新したい場合がありますよね。
今回は、例を挙げて上記の内容を説明します。

環境

  • MySQL: 8.0.28

別の表からSELECTした結果をINSERT

サンプルとして、fruitテーブルとfruit_2テーブルを作成しておきます。

mysql> SELECT * FROM fruit;
+----+--------+
| id | name   |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | grape  |
+----+--------+
3 rows in set (0.01 sec)
mysql> SELECT * FROM fruit_2;
+----+--------+
| id | name   |
+----+--------+
|  1 | cherry |
|  2 | lemon  |
|  3 | melon  |
+----+--------+
3 rows in set (0.00 sec)

fruit1に、fruit_2のレコードをINSERTします。
fruit_2から抽出した結果を挿入する形になります。

INSERT INTO fruit (
    name
)
SELECT
    name
FROM fruit_2
;

問題なくレコードが挿入できていることを確認できます。

mysql> SELECT * FROM fruit;
+----+--------+
| id | name   |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | grape  |
|  4 | cherry |
|  5 | lemon  |
|  6 | melon  |
+----+--------+
6 rows in set (0.01 sec)

別の表をJOINしてUPDATE

先程例に挙げたfruitテーブルの在庫数を管理する、fruit_stockテーブルを作成しておきます。

mysql> SELECT * FROM fruit_stock;
+----+----------+-------+
| id | fruit_id | count |
+----+----------+-------+
|  1 |        1 |    10 |
|  2 |        2 |    10 |
|  3 |        3 |    10 |
|  4 |        4 |    10 |
|  5 |        5 |    10 |
|  6 |        6 |    10 |
+----+----------+-------+
6 rows in set (0.01 sec)

「bananaの在庫数が減ったので更新したい」とします。

そうなると、bananaのレコードを特定して更新する必要がありますね。
fruitテーブルを結合して更新しましょう。

UPDATE fruit_stock fs
INNER JOIN fruit f on fs.fruit_id = f.id
set fs.count = 5
where f.name = 'banana';

以下で、問題なくデータが更新されていることが確認できます。

mysql> SELECT * FROM fruit_stock;
+----+----------+-------+
| id | fruit_id | count |
+----+----------+-------+
|  1 |        1 |    10 |
|  2 |        2 |    10 |
|  3 |        3 |    10 |
|  4 |        4 |    10 |
|  5 |        5 |    10 |
|  6 |        6 |    10 |
+----+----------+-------+
6 rows in set (0.01 sec)

まとめ

複数テーブルを使用したテーブルのINSERT, UPDATEの例を紹介しました。
使用する場面はよくあると思うので、是非参考にして使ってみてください。

また、他にもMySQLに関連した記事を書いているので、興味のある方は↓から覗いていってください。
MySQLカテゴリの記事はこちら

コメント

タイトルとURLをコピーしました