我們從一個項目表開始,很快意識到我們需要多個表來表達我們想要做的事情。用另一個表中的唯一值更新一個表?
我們開始切換,但現在我想完全從一個表切換到多個。
我現在擁有的一切:
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 |
+------------+----------+------+
但是,當我從臨時添加到手機,我結束了重複的條目(在本例中,其中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;
最終,我會刪除列 「手機」從接觸。問題是,如果表格中已經有一個電話號碼的條目,我剩下的是重複的。 我該如何預防?
此外,如果我做錯了,我也可以改變這一點。我只是認爲臨時表可能是最好的方式?
INSERT忽視的是去我覺得(有可能是一個人的多個電話號碼)的方式。 – Jeff
如果可能有多個電話號碼,則主鍵(或唯一鍵)應該是con_id,電話。如果你想同時更新「main」字段,你應該使用「REPLACE」,如果你想保留「main」中的值,你可以很好地使用「INSERT IGNORE」,它會更快。 – Ursula
所以我不需要臨時表嗎? – Jeff