Mysql
將 MySql 表拆分為具有一對多關係的兩個表
我在 MySql 中有一個舊的數據庫表。它用於儲存來自線上電子商務的訂單。簡化圖如下所示:
+----+------+-----------------------+-------+--------------+ | id | name | address | phone | order_number | +----+------+-----------------------+-------+--------------+ | 1 | Joe | Joes Address | 1111 | 1390842 | | 2 | Paul | Pauls Address | 2222 | 9082309 | | 3 | Greg | Gregs Address | 3333 | 0928340 | | 4 | Lucy | Lucys Address | 4444 | 9028340 | | 5 | Paul | Pauls Address | 2222 | 8958399 | | 6 | Tom | Toms Address | 5555 | 9084024 | | 7 | Lucy | Lucys Another Address | 4444 | 9801983 | | 8 | Paul | Pauls Another Address | 2222 | 0982304 | +----+------+-----------------------+-------+--------------+
每個訂單都有一個單獨的姓名地址和電話號碼。一些客戶下訂單 2 次或更多次(Lucy 和 Paul)。保羅住在 Pauls Address 時下了兩份訂單,搬到 Pauls Another Address 時下了一份訂單。露西搬家後下了一個訂單,然後又下了一個訂單。
我需要做的是把這張表分成兩張表。一個表是 user_account 表,它只保存姓名和電話號碼,而另一張表將保存地址,並通過 FK 與 users_account 相關聯。
user_accounts 應如下所示:
+----+------+-------+ | id | name | phone | +----+------+-------+ | 1 | Joe | 1111 | | 2 | Paul | 2222 | | 3 | Greg | 3333 | | 4 | Lucy | 4444 | | 5 | Tom | 5555 | +----+------+-------+
而地址應如下所示:
+----+-----------------------+-----------------+ | id | address | user_account_id | +----+-----------------------+-----------------+ | 1 | Joes Address | 1 | | 2 | Pauls Address | 2 | | 3 | Gregs Address | 3 | | 4 | Lucys Address | 4 | | 5 | Toms Address | 5 | | 6 | Lucys Another Address | 4 | | 7 | Pauls Another Address | 2 | +----+-----------------------+-----------------+
我將如何從我的舊單表中生成這兩個表。任何幫助表示讚賞。我完全堅持這一點,甚至不確定我應該在Google中尋找什麼查詢來為我指明正確的方向。原始表中有大約 100k 行。
PS。
我想根據正常表中不同的電話號碼創建 user_accounts 表。
沒有足夠的時間來測試或寫出所有的表創建,但這是一個開始……
首先創建表來保存使用者。您可以從以下查詢中獲取數據。我不知道您想如何處理的一件事是,如果使用者存在不同的電話號碼。
SELECT DISTINCT name , phone FROM old_table
在您擁有 user_accounts 表後,將其加入 old_table 以獲取地址和新使用者 ID。
SELECT DISTINCT a.address , b.id FROM old_table a INNER JOIN user_accounts b on a.name = b.name and a.phone = b.phone