我有一個帶有1000個人員記錄的MySQL數據庫,通常帶有重複項。MySQL:用新值替換特定外鍵的所有實例
對於每個至少有一個副本的情況,我希望能夠刪除除一個之外的所有副本,然後使用我沒有的副本更新對這些已刪除外鍵的引用。
例如,我們看到的下面Star Lord
兩個實例:
+-----------------------+
| `users` |
+------+----------------+
| id | name |
+------+----------------+
| 1 | Star Lord |
+------+----------------+
| 2 | Star Lord |
+------+----------------+
| 3 | Iron Man |
+------+-----+----------+
+-----------------------+
| `messages` |
+------+-----+----------+
| from | to | text |
+------+-----+----------+
| 1 | 5 | hi |
+------+-----+----------+
| 2 | 5 | how r u |
+------+-----+----------+
| 5 | 2 | Good, u? |
+------+-----+----------+
這兩個表應該成爲:
+-----------------------+
| `users` |
+------+----------------+
| id | name |
+------+----------------+
| 1 | Star Lord |
+------+----------------+
| 3 | Iron Man |
+------+-----+----------+
+-----------------------+
| `messages` |
+------+-----+----------+
| from | to | text |
+------+-----+----------+
| 1 | 5 | hi |
+------+-----+----------+
| 1 | 5 | how r u |
+------+-----+----------+
| 5 | 1 | Good, u? |
+------+-----+----------+
可以這樣做?我很高興根據需要使用PHP。
我發現下面的,但它只是用於查找外鍵的使用,而不是取代實例特定鍵值:MySQL: How to I find all tables that have foreign keys that reference particular table.column AND have values for those foreign keys?
獎勵積分
有可能是一個需要有額外的數據合併在users
表中。例如,ID爲1的Star Lord
可能填寫了phone
字段,但ID號爲2的Star Lord
的字段爲email
。
最壞情況:他們都有有一個字段,有衝突的數據。
除非你要進行人工干預,獎勵積分是近不可解。你可以做空值,但除非你能爲每次衝突提出一個規則,否則不行。 – 2015-04-05 08:38:42