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