首页 > 解决方案 > 临时表上的多个条件 - MySQL

问题描述

我有一个名为“tempaction”的临时表。我想选择“ActionID”与另一个表匹配的行。我收到了安全更新模式错误,我认为 ActionID 是复合主键的一部分。但是,当我尝试

UPDATE action
SET Status = 'Sent'
WHERE ActionID IN( select ActionID from tempaction)
AND DeviceID IN( select DeviceID from tempaction);

我得到临时表无法重新打开错误。

过去检查主键的两个部分都可以解决安全更新错误。我也明白我不能在同一个语句中引用一个临时表两次。

如何从此临时表中选择具有匹配 ActionID 或匹配 ActionID AND DeviceID 的行?

临时表

CREATE TEMPORARY TABLE tempaction (ActionID BIGINT)
SELECT * 
FROM action
WHERE DeviceID = '1234'
AND Status = 'Pending'

标签: mysql

解决方案


您可以尝试使用 Join 和子查询进行更新。

UPDATE action a
JOIN
    tempaction t ON a.ActionID = t.ActionID 
SET 
    a.Status = 'Sent';

推荐阅读