2016-10-28 101 views
0

我有一個平板包含帖子和評論。目前,帖子和評論並沒有真正相互關聯,我只知道,評論之前(根據id列)他們相應的帖子。更新與在哪裏選擇

第一步改進是建立一個「commentforid」欄,並適當填充:

UPDATE mytable t 
SET t.commentforid = (SELECT x.id 
         FROM mytable x 
         WHERE x.origin = 'POST' 
         AND x.id > t.id 
         LIMIT 1) 
WHERE t.origin = 'COMMENT' 

但是,查詢失敗,

您不能指定目標表「T '在FROM子句中更新

有沒有人知道問題是什麼?我無法做出任何錯誤信息。

回答

1

的錯誤與您要更新的同桌你選擇,你可以使用一個臨時表

嘗試使用DINAMIC從表

UPDATE mytable t 
    SET t.commentforid = (SELECT x.id 

         FROM (select z.id from mytable z 
         WHERE x.origin = 'POST') x on x.id > t.id 
         LIMIT 1) 
    WHERE t.origin = 'COMMENT' 
+0

謝謝,工作! –

+0

@ D.R。如果我的回答是正確的,請將其標記爲已接受。 – scaisEdge

+0

有一個最低時間的分鐘,你必須等待才能夠這樣做。 –

1

的錯誤信息是覆蓋這種情況的事實挺清楚的。它告訴你,你不能從你正在更新的同一張表中獲得新的價值。

爲什麼?

想象一下(即使是一個錯誤),您嘗試使用相同的記錄和字段值更新記錄中的字段。這對你有意義嗎?

+0

謝謝澄清底層問題,@scaisEdge提供了一種解決方法。 –

+0

另一種方法是(這是我更喜歡的方式,因爲它使代碼更易於閱讀和理解):在單個select語句(這將是內部選擇)中獲取字段的新值,然後用戶在更新語句(您的外部選擇)中檢索到的值。是的,我知道,有些人會不同意,但軟件工程中的一個黃金法則(不幸遺忘或許多人不知道)是**你不爲你寫代碼,但是對於其他需要閱讀和理解的人它**。 – FDavidov