因此,我无法绕过此MySQL限制而无需更改整个查询或将其拆分为单独的SELECT
/ UPDATE
操作对:
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
这种查询会产生错误:
您无法指定目标表"动物"用于FROM子句中的更新
虽然我确定这是一个很好的理由,但由于查询的意图很明确,所以有点令人沮丧。有一个简单的解决方法吗? UPDATE FROM
可以成为一个解决方案......而不是将其重写为子查询SELECT
操作或两个单独的操作吗? https://stackoverflow.com/a/37284940/963901
答案 0 :(得分:0)
您可以尝试在外部UPDATE
语句中明确地连接所有四个表:
UPDATE `animal`
LEFT JOIN `animalFriends`
ON (`animalFriends`.`animal_id_friend`=`animal`.`id`)
LEFT JOIN `animalFitnessGroup`
ON `animalFitnessGroup`.`animal_id_firstMember`=`animal`.`id` OR
`animalFitnessGroup`.`animal_id_firstMember`=`animalFriends`.`animal_id_friend2`
LEFT JOIN `trainer`
ON `animalFitnessGroup`.`trainer_id`=`trainer`.`id`
SET `animal`.`trainer_friend_name_latest` = `trainer`.`name`
WHERE `animal`.`id`=123
如果没有查看数据并对查询有更深入的了解,我无法确定这是否符合您的要求。