在我的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
答案 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