如何更新在SELECT语句中使用的相同表

时间:2013-06-12 16:37:23

标签: mysql sql

我有这个:

UPDATE recibo SET liquidado = 1 
WHERE clave_recibo = (
    SELECT clave_recibo FROM recibo
    WHERE paciente_clave_paciente = (
        SELECT clave_paciente FROM paciente
        WHERE nombre_paciente = 'foo' AND 
        apellido_paterno_paciente = 'foo' AND
        apellido_materno_paciente = 'foo') 
    AND fecha_recibo = (
    SELECT fecha_recibo FROM recibo 
    WHERE paciente_clave_paciente = (
        SELECT clave_paciente FROM paciente
        WHERE nombre_paciente = 'foo' AND 
        apellido_paterno_paciente = 'foo' AND
        apellido_materno_paciente = 'foo')
    ORDER BY fecha_recibo DESC LIMIT 1) 
);

我收到以下错误:

  

错误代码:1093。您无法在FROM子句中为更新指定目标表'recibo'

我已经读过你不能修改你在FROM子句中使用的同一个表 有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

不知道它是否有效...加入表格,然后写下你的where语句

更新recibo LEFT JOIN recibo r ON recibo。id = r。id SET ... WHERE ...

答案 1 :(得分:0)

您可以从内部选择中创建temporary table,然后按

进行更新

其中clave_recibo =(从temptbl中选择clave_recibo)

join

您也应该lock表进行写入,因为有人可能会在创建临时表和更新查询后插入/更新某些内容。

然后解锁并删除临时表。