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カテゴリの記事はこちら
 
  
  
  
  

コメント