3
所以,我似乎無法避開這個MySQL限制在不改變整個查詢或將其拆分成一個獨立的SELECT
/UPDATE
操作對:如何更新使用子查詢SELECT列相對於父表?
UPDATE `animal`
LEFT JOIN `animalFriends`
ON (`animalFriends`.`animal_id_friend`=`animal`.`id`)
SET `animal`.`trainer_friend_name_latest`=
(
SELECT `trainer`.`name`
FROM `animalFitnessGroup`
LEFT JOIN `trainer`
ON (`animalFitnessGroup`.`trainer_id`=`trainer`.`id`)
WHERE `animalFitnessGroup`.`animal_id_firstMember`=`animal`.`id` OR
`animalFitnessGroup`.`animal_id_firstMember`=`animalFriends`.`animal_id_friend2`
ORDER BY `animalFitnessGroup`.`id` DESC
LIMIT 1
)
WHERE `animal`.`id`=123
這類查詢的渲染錯誤:
You can't specify target table "animal" for update in FROM clause
儘管我確信這有一個很好的理由,但這有點令人沮喪,因爲查詢的意圖很明確。有一個簡單的解決方法嗎?難道UPDATE FROM
是一個解決方案...沒有重寫這個子查詢SELECT
操作或兩個單獨的操作? https://stackoverflow.com/a/37284940/963901
'animalFitnessGroup'表中有許多對象,我們只是試圖選擇最新的一個。所以,我不確定JOIN是否會起作用,因爲它需要排序? –
你能否在你的問題中包含樣本數據?僅使用您的嘗試來查看查詢是很困難的。 –
那麼這個問題就是數據少了,而且更多的是'SELECT'和'UPDATE'在同一個表中有一個限制。 –