繁体   English   中英

如何使用SELECT的列相对于父表的子查询更新?

[英]How to UPDATE using subquery that SELECT's column relative to the parent table?

所以,我似乎无法绕过这个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子句中为更新指定目标表“animal”

虽然我确信这是有充分理由的,但由于查询的意图很明确,所以有点令人沮丧。 有一个简单的解决方法吗? 可以UPDATE FROM是一个解决方案......而不是将其重写为子查询SELECT操作或两个单独的操作? https://stackoverflow.com/a/372​​84940/963901

您可以尝试在外部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

如果没有看到数据并对查询有更深入的了解,我就不能确定这会按照您的意愿行事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM