2012-12-26 94 views
-1

我需要將數據從flat_table插入到兩個表client_data client_contact中。如何插入到具有相同自動遞增ID的兩個表

flat_table 
    f_name 
    l_name 
    client_id 
    phone 
    address 

client_data 
    id AI 
    f_name 
    l_name 
    ... 
    ... 

client_contact 
    client_id 
    phone 
    address 
    ... 
    ... 

我想使用mysql_last_id莫名其妙,但我甚至不知道從哪裏開始。

還有其他類似的問題,但他們不回答我的問題。

+0

關於你的第二插件,您可以使用[LAST_INSERT_ID()](http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id)爲外鍵列。 (假設你逐行插入你的數據。) – JimmyB

回答

1
  1. 假設沒有兩個客戶端共享同一個f_namel_name

    INSERT INTO client_data (f_name, l_name) 
        SELECT DISTINCT f_name, l_name 
        FROM flat_table; 
    
    INSERT INTO client_contact (client_id, phone, address) 
        SELECT d.id, f.phone, f.address 
        FROM flat_table f JOIN client_data d USING (f_name, l_name); 
    
  2. 假設在flat_table所有記錄對應於不同的客戶端:

    CREATE TEMPORARY TABLE flat_table2 (
        id SERIAL 
    ) SELECT * FROM flat_table; 
    
    INSERT INTO client_data (id, f_name, l_name) 
        SELECT DISTINCT id, f_name, l_name 
        FROM flat_table2; 
    
    INSERT INTO client_contact (client_id, phone, address) 
        SELECT id, phone, address 
        FROM flat_table2; 
    
    DROP TEMPORARY TABLE flat_table2; 
    
  3. 如果不同的客戶端可能共享相同的f_namel_name但不是每個rec ord在flat_table對應一個唯一的客戶端,您將需要找到某種方式來識別哪些記錄與哪些客戶端相對應。

+0

如果兩個人有相同的名字會怎麼樣?即「約翰史密斯」 – user1658688

+0

我想我明白了。我會用這兩個。用id創建一個臨時表,然後使用你的第一個例子,但將id作爲連接。謝謝。 – user1658688

相關問題