2014-11-08 82 views
1

我使用REPLACE INTO以下MySQL的聲明:如何將此REPLACE INTO語句轉換爲MySQL中等價的UPDATE語句?

INSERT INTO `tableX`.latest_status (tableX_id, name, nick) 
(
    SELECT records.id, 
      records.name, 
      records.nick 
    FROM `tableX`.records records 
    WHERE (`records`.`time` = 0) 
) 
ON DUPLICATE KEY UPDATE name=tableX.name, nick=tableX.nick 

由於創建了一些bug,我意識到REPLACE INTO不適合我的應用程序。我想要的是更新現有的行。如果該行不存在,則不執行任何操作。我猜UPDATE應該是正確的使用條款。我在這一點上是否正確?

我試圖使用UPDATE將上面的MySQL語句轉換爲等價的語句。這是代碼;

UPDATE `tableX`.latest_status 
SET tableX_id, name, nick = 
(
    SELECT records.id, 
      records.name, 
      records.nick 
    FROM `tableX`.records records 
    WHERE (`records`.`time` = 0) 
) 

不幸的是,在SET tableX_id, name, nick上有一些語法錯誤。等效的UPDATE語句應該如何?

回答

3

Idont知道如果我得到你想要的東西,但這個東西可以幫助你(我認爲你可以做類似的東西與你的表)

UPDATE patient 
SET full_name=(
    SELECT full_name 
    FROM staff 
    WHERE staff.id=patient.id 
) 
,national_number = 
(
    SELECT national_number 
    FROM staff 
    WHERE staff.id=patient.id 
) 
+0

雖然你的答案看起來很囉嗦,效率低下,但對於像我這樣的新手來說,這至少更容易理解。我試了一下,事情奏效。所以,我選擇它作爲正確的答案。謝謝。 – user781486 2014-11-08 08:57:45

+0

謝謝我,我也是一個新手,所以我知道有多難找到一個簡單的答案 – 2014-11-08 09:53:08

1

你的語法關閉 - 你不能寫任何類似的查詢。通過

嘗試更新聯接:

UPDATE tableX.latest_status s 
JOIN tableX.records r 
    ON id = tableX_id 
    AND r.name = s.name 
    AND time = 0 
SET s.nick = r.nick 
+0

我認爲你的回答是正確的,但我不知道如何將它翻譯成我的代碼。由於我不夠好,故障是我的錯。 Moneer Kamal的另一個答案效率不高,但至少對我來說更容易理解。我用他的答案得到了一些東西。所以,我打算把他的答案作爲正確答案投票。抱歉。 – user781486 2014-11-08 08:56:40

+0

沒關係。如果其他答案對你更好,那麼它可以更好地爲別人工作。永遠不要感到壓力投票 - 只是自然投票。快樂的編碼。 – Bohemian 2014-11-08 09:33:46