gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:18 25 4
gpt4 key购买 nike

因此,如果不更改整个查询或将其拆分为单独的SELECT/UPDATE 操作对,我似乎无法绕过这个 MySQL 限制:

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

最佳答案

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

在没有看到数据和对查询有更深入的了解的情况下,我无法确定这是否会按照您的要求行事。

关于mysql - 如何使用 SELECT 列相对于父表的子查询进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37693746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com