プロジェクト用に 1 つのテーブルから始めましたが、やりたいことのために複数のテーブルが必要であることにすぐに気付きました。
切り替えを開始しましたが、今は 1 つのテーブルから複数のテーブルに完全に切り替えたいと考えています。
私が今持っているもの:
TABLE: CONTACT
+-----+-------+--------+----------+
| id | fname | lname | phone |
+-----+-------+--------+----------+
| 123 | John | Doe | 555-1234 |
| 124 | Mary | Shelly | 555-5857 |
| 125 | Jane | Doe | NULL |
+-----+-------+--------+----------+
TABLE: PHONE
+----+--------+----------+------+
| id | con_id | phone | main |
+----+--------+----------+------+
| 1 | 125 | 555-5857 | N |
+----+--------+----------+------+
そのため、追加および変更されたものがいくつかあります。ここで、CONTACT テーブルから PHONE テーブルにまだないすべてのデータを追加する必要があります。私は一時テーブルでそれを行います:
TABLE: temp
+------------+----------+------+
| foreign_id | phone | main |
+------------+----------+------+
| 123 | 555-1234 | Y |
| 124 | 555-4153 | Y |
| 125 | 555-5857 | N |
+------------+----------+------+
しかし、temp から phone に追加すると、エントリが重複してしまいます (この例では、contact.id = 125)。
これは私が到達しようとしているものです:
TABLE: CONTACT
+-----+-------+--------+
| id | fname | lname |
+-----+-------+--------+
| 123 | John | Doe |
| 124 | Mary | Shelly |
| 125 | Jane | Doe |
+-----+-------+--------+
TABLE: PHONE
+----+--------+----------+------+
| id | con_id | phone | main |
+----+--------+----------+------+
| 1 | 125 | 555-5857 | N |
| 2 | 123 | 555-1234 | Y |
| 3 | 124 | 555-4153 | Y |
+----+--------+----------+------+
私が実行したコマンド:
create temporary table temp (select t2.id, phone from contact t2);
alter table temp add main varchar(1);
update temp set main = "Y";
insert into phone (con_id, phone, main) select id, phone, main from temp;
drop table temp;
そして最終的に、連絡先から「電話」列を削除します。問題は、テーブルに電話番号のエントリが既にある場合、重複が残ることです。どうすればそれを防ぐことができますか?
また、間違っている場合は、それも変更できます。一時テーブルが最善の方法かもしれないと思いましたか?