如果我正确理解了数据结构,您可以使用 WHERE 子句中的相关子查询来执行此操作。
您正在更新其中 resource_id 是输入身份的成员资格表。您正在寻找得分最高的记录。以下应该这样做:
UPDATE engine4_event_membership a join
engine4_event_events b
on b.event_id = a.resource_id
SET a.points = a.points + b.prize
WHERE a.resource_id = '{$this->event->getIdentity()}' and
a.points = (select max(a2.points)
from engine4_event_membership a2
where a2.resource_id a.resource_id
)
这可能会得到相同的 MySQL 错误。因此,需要将 WHERE 子句移至连接:
UPDATE engine4_event_membership a join
engine4_event_events b
on b.event_id = a.resource_id join
(select resource_id, max(points) as maxpoints
from engine4_event_membership
group by resource_id
) amax
on a.resource_id = amax.resource_id and
a.points = amax.points
SET a.points = a.points + b.prize
WHERE a.resource_id = '{$this->event->getIdentity()}'
无法在相关子查询中使用目标表是 MySQL 的一个限制。