2012-07-18 66 views
0

我需要添加一些記錄到一個表,但只有那些匹配某個鏈接表。 有三個表如下:多個JOIN的MySQL更新表

extension_prefs (extension_id, value, parameter) 
extension (id, client_id) 
client (id, parent_client_id) 

這些將鏈接如下:

extension_prefs.extension_id = extension.id AND extension.client_id = client.id 

我需要插入4條記錄到extension_prefs屬於客戶端與特定parent_client_id每個擴展。我不知道要達到這個目的的語法,儘管我覺得它非常簡單。

編輯:是的,我搞砸了,這些記錄需要更新沒有插入。

非常感謝

喬治

回答

0

您可以撥打各的喜好以下查詢,它會保存所有必要的擴展。

更新: 下面的查詢爲首選項插入一個新行,或者如果它存在,則更新現有的一行。
這假定extension_prefs表對extension_id和parameter列具有唯一約束。

INSERT INTO extension_prefs (extension_id, parameter, value) 
    SELECT e.id, "key", "value" 
    FROM extension e 
    JOIN client c ON e.client_id = c.id 
    WHERE c.parent_client_id = 123 
ON DUPLICATE KEY 
    UPDATE value = "value" 
+0

看來我犯了一個錯誤,我需要更新extension_prefs中的記錄,因爲它們已經存在。這是如何改變語法的? – btongeorge 2012-07-18 12:52:13

+0

您可以添加一個「ON DUPLICATE KEY」子句來處理這些 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 或者這是否意味着您只需要做更新,永遠不會插入? – Raul 2012-07-18 12:54:51

+0

對不起,我認爲我弄亂了原來的問題。我應該說「我需要使用某個parent_client_id更新客戶端中的所有記錄的extension_prefs中的一堆記錄」。我覺得這很容易? – btongeorge 2012-07-18 12:58:37