在MySQL中选择某些记录后更新

时间:2012-03-13 17:35:16

标签: mysql

在我的customer表格中,ref是自动增量,ID是客户识别码。因此,每个客户有多个ID(形成每个客户的历史记录)。我想通过在所有情况下将likelihood字段设置为1来更新每个客户的最新记录 - 但不创建新记录。

我认为像这样的查询可以完成这项工作:

  

UPDATE customer SET likelihood = 1 WHERE customer.ref IN   (SELECT MAX(ref)FROM customer GROUP BY ID)

但是我收到以下错误:

  

“#1093 - 您无法在FROM子句”

中为更新指定目标表'customer'

我哪里错了?

编辑: 一些样本数据(不是完整的表格)

ref | ID | likelihood | name
----+----+------------+-----
  1 |  1 |          0 | a
  2 |  2 |          0 | b
  3 |  1 |          0 | a
  4 |  2 |          0 | b
  5 |  1 |          0 | a
  6 |  1 |          0 | a

所以我想挑选出来:

  4 |  2 |          0 | b
  6 |  1 |          0 | a

并将其更改为:

  4 |  2 |          1 | b
  6 |  1 |          1 | a

2 个答案:

答案 0 :(得分:3)

我不记得它是否允许自我加入更新。试一试 -

UPDATE customer c1
LEFT JOIN customer c2
    ON c1.ID = c2.ID
    AND c1.ref < c2.ref
SET c1.likelihood = 1
WHERE c2.ID IS NULL

编辑我已将第二个连接条件中使用的列从ID更改为ref。

答案 1 :(得分:2)

您收到错误是因为您无法更新要从​​中选择的表。您正在编写的where子句是从customers表中选择的,因此您无法在更新

中写入它

您可能需要两个查询来解决此问题,例如:

SELECT @max_ref:=max(ref) FROM customers;
UPDATE customers SET likelihood=1 WHERE ref=@max_ref