如何在更新语句中使用max()函数?

时间:2019-04-26 16:51:16

标签: mysql

当前,我正在为一个类项目工作,该项目要求我们为mysql数据库创建前端。出于学习目的,我们仅使用单个患者表,而没有为唯一标识符(Patient_id)实现自动递增。我们必须添加新的患者,并要解决此问题,我们计划让C#前端创建一个Patient_id值0,然后再声明另一个以将其更新为最大Patient_id +1。我知道这是不实际的/ safe解决方案,因为它可能会导致错误,但是因为它仅用于测试,并且未与其他表链接,所以我不太担心。

我尝试使用基本查询通过设置Patient_id = max(Patient_ID)+ 1来解决此问题,但这似乎不起作用。

UPDATE patient
set patient_id = (select max(patient_id) + 1 from patient)
where patient_id = 0;

此查询的输出表明,我无法在FROM子句中指定目标表“患者”进行更新,因此我对为什么不能这样做感到困惑。

1 个答案:

答案 0 :(得分:0)

您不能使用同一表进行选择和更新,但是您正在使用子查询来构建stmp表,从而避免了该问题:

  UPDATE patient
  SET patient_id = (SELECT t.max_id  
                    FROM
                        (SELECT MAX(patient_id) + 1 FROM patient)) t
  WHERE patient_id = 0;