MySQL使用count更新同一个表中的值

Jan*_*n.J 7 mysql sql subquery sql-update

我想要做的是为每个患者设置其唯一的患者代码,该代码以1开头,而不是基于行ID.Id仅指定订单.像这样的东西:

patient_id  patient_code
    2           1
    3           2
    4           3
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

UPDATE patients p1
SET p1.patient_code = (
    SELECT COUNT( * ) 
    FROM patients p2
    WHERE p2.patient_id <= p1.patient_id 
)
Run Code Online (Sandbox Code Playgroud)

但这是错误:

#1093 - You can't specify target table 'p1' for update in FROM clause
Run Code Online (Sandbox Code Playgroud)

我找到了这个帖子:Mysql错误1093 - 无法在FROM子句中指定更新目标表.
但是我不知道如何应用已批准的答案来处理COUNT所需的子查询WHERE.

ype*_*eᵀᴹ 8

UPDATE
    patients AS p
  JOIN
    ( SELECT 
          p1.patient_id
        , COUNT(*) AS cnt 
      FROM 
          patients AS p1
        JOIN 
          patients AS p2
            ON p2.patient_id <= p1.patient_id 
      GROUP BY 
          p1.patient_id
    ) AS g
    ON g.patient_id = p.patient_id
SET 
    p.patient_code = g.cnt ;
Run Code Online (Sandbox Code Playgroud)