首页 > 解决方案 > 从同一个表中选择计数的 UPDATE 语句以查找第一次出现

问题描述

我有一张会员资格表,如果同一用户之前没有其他会员资格,我想将给定的会员资格标记为“第一次”。

我正在尝试在 MySQL 中进行打击,但我得到:“一般错误:1093 您不能在 FROM 子句中指定目标表 'orgUserPlan' 进行更新”

UPDATE orgUserPlan SET isFirstTime = 
!(SELECT COUNT(id)FROM orgUserPlan
WHERE orgUserPlan.orgUser_id = 1 
AND orgUserPlan.id  < 123456
AND orgUserPlan.isDeleted != true
AND orgUserPlan.isCanceled != true) 
WHERE orgUserPlan.id = 123456

标签: mysql

解决方案


是的,MySQL 不允许您在同一个表的子查询中执行 SELECT,而您已经在外部查询中执行了 UPDATE 或 DELETE。

MySQL 确实支持多表 UPDATE 语法。您的案例可以在不使用 COUNT(*) 的情况下完成。请改用联接。

UPDATE orgUserPlan AS o1
LEFT OUTER JOIN orgUserPlan AS o2
  ON o1.orgUser_id = o2.orgUser_id AND o1.id > o2.id
  AND o2.isDeleted != true AND o2.isCanceled != true
SET o1.isFirstTime = o2.id IS NULL;

如果没有其他行具有相同的用户 id 和较早的id,则外连接将返回所有o2.*NULL 列。这意味着o1指向该用户 ID 的最早行。


推荐阅读