SQLでのレコード更新、追加処理
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としたい
+------+------------------+------+------+
どうぞ宜しくお願いします。
お礼
お礼が遅くなりまして申し訳ございません。 ご回答ありがとうございます。 yokohamahopeさんのおっしゃるように、原価管理の観点から不都合が生じやすい状況が生まれてしまいますね。するとこれが不正の温床となってしまう可能性も考えられますね。 参考になりました。