※ ChatGPTを利用し、要約された質問です(原文:SQLでのレコード更新、追加処理)
SQLでのレコード更新、追加処理
このQ&Aのポイント
Windows7 32bit MySQL5.5を使用しています。テーブルのスペースが崩れてしまっていて見づらいかと思いますが、よろしくお願いします。
BテーブルとCテーブルの更新情報を反映する方法について教えてください。
create table tempを使用してBテーブルとCテーブルを結合し、Cテーブルを作成する方法がありますが、もっとスマートな方法はありますか?また、NULLではなく、FALSEをdefault値として反映したいです。
Windows7 32bit MySQL5.5を使用しています。
テーブルのスペースが崩れてしまっていて見づらいかと思いますが
よろしくお願いします。
・table B
+------+------------------+------+
| id | name | id_A |
+------+------------------+------+
| 1 | 手順書作成 | 1 |
| 2 | レビュー | 1 |
| 3 | 開発 | 2 |
| 4 | 社内・社外研修 | 3 |
+------+------------------+------+
(id=主キー、name=文字列、id_A=テーブルAを参照するための外部キー)
↓
1回だけ以下のプログラムを実行し、table Cを生成します
create table C (SELECT * FROM B);
alter table C add flag Boolean default FALSE;
↓
・table C
+------+------------------+------+------+
| id | name | id_A | flag |
+------+------------------+------+------+
| 1 | 手順書作成 | 1 | 0 |
| 2 | レビュー | 1 | 0 |
| 3 | 開発 | 2 | 0 |
| 4 | 社内・社外研修 | 3 | 0 |
+------+------------------+------+------+
その後、Bが不定期に更新されるため、どこかの
タイミングで、同様にCにも更新情報を反映したいのです。
↓
・更新されたtable B
+------+------------------+------+
| id | name | id_A |
+------+------------------+------+
| 1 | 手順書作成 | 1 |
| 2 | レビュー | 1 |
| 3 | 開発 | 2 |
| 4 | 社内研修 | 3 |
| 5 | 社外研修 | 3 |
+------+------------------+------+
↓
・table C
+------+------------------+------+------+
| id | name | id_A | flag |
+------+------------------+------+------+
| 1 | 手順書作成 | 1 | 1 |
| 2 | レビュー | 1 | 0 |
| 3 | 開発 | 2 | 0 |
| 4 | 社内研修 | 3 | 1 | ←このレコードは更新したい
| 5 | 社外研修 | 3 | 0 | ←このレコードは追加したい
+------+------------------+------+------+
どのように指定をすればいいでしょうか。
思いつくのは
create table temp(
select B.id, B.name, B.id, C.flag
from B
left join C
on(C.id=B.id));
drop table c;
create table c(select * from temp);
drop table temp;
という方法ですが、もう少しスマートな処理方法がないか、
そして、default値が反映されたものにしたいのです。
(上記を実行すると以下になります)
・table temp
+------+------------------+------+------+
| id | name | id_A | flag |
+------+------------------+------+------+
| 1 | 手順書作成 | 1 | 1 |
| 2 | レビュー | 1 | 0 |
| 3 | 開発 | 2 | 0 |
| 4 | 社内研修 | 3 | 1 |
| 5 | 社外研修 | 3 | NULL |←NULLではなく、FALSEとしたい
+------+------------------+------+------+
どうぞ宜しくお願いします。
お礼
大変参考になり、そのように作成することができました。 ありがとうございました。