在MySQL中选择某些记录后更新
在我的客户表中,ref是自动增量,ID是客户标识号。因此,每个客户都有多个ID,这些ID构成了每个客户的历史记录。我想通过在所有情况下将“可能性”字段设置为1来更新每个客户的最新记录,但不创建新记录 我认为这样的查询就可以了: 更新客户集可能性=1,其中customer.ref位于 按ID从客户组中选择MAXref 但我得到了以下错误: 1093-无法在FROM子句中为更新指定目标表“customer” 我哪里做错了 编辑: 有些示例数据不是完整的表在MySQL中选择某些记录后更新,mysql,Mysql,在我的客户表中,ref是自动增量,ID是客户标识号。因此,每个客户都有多个ID,这些ID构成了每个客户的历史记录。我想通过在所有情况下将“可能性”字段设置为1来更新每个客户的最新记录,但不创建新记录 我认为这样的查询就可以了: 更新客户集可能性=1,其中customer.ref位于 按ID从客户组中选择MAXref 但我得到了以下错误: 1093-无法在FROM子句中为更新指定目标表“customer” 我哪里做错了 编辑: 有些示例数据不是完整的表 ref | ID | likelihood
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
由于无法更新从中选择的表,因此出现错误。您正在编写的where子句正在从customers表中进行选择,因此无法在更新中写入该子句 您可能需要两个查询来完成此操作,例如:
SELECT @max_ref:=max(ref) FROM customers;
UPDATE customers SET likelihood=1 WHERE ref=@max_ref
由于无法更新从中选择的表,因此出现错误。您正在编写的where子句正在从customers表中进行选择,因此无法在更新中写入该子句 您可能需要两个查询来完成此操作,例如:
SELECT @max_ref:=max(ref) FROM customers;
UPDATE customers SET likelihood=1 WHERE ref=@max_ref
我不记得它是否允许在更新中进行自加入。试试这个-
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。我记不起它是否允许在更新中进行自联接。试试这个-
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。您可以发布一些示例数据吗……您粘贴的错误是否准确?当查询在表“customer”上时,错误引用了表“clients”。@kclair right message,error table-Edit,Thank Scan post一些示例数据…您粘贴的错误是否准确?当查询在表“customer”上时,错误引用了表“clients”。@kclair right message,error table-edited,thanksThanks,但是MySQL返回了一个空的结果集,即零行。我不知道它如何知道为每个客户选择最新的ID?哦,很抱歉,我错过了它必须更新每个客户的部分,所以查询没有真正做到你需要它做的事,我的错是没有彻底阅读问题,同时我非常感谢jchong的帮助,正如jchong所说的,这并不能满足要求——所以我不知道为什么它会被提升?谢谢,但是MySQL返回了一个空的结果集,即零行。我不知道它如何知道为每个客户选择最新的ID?哦,很抱歉,我错过了它必须更新每个客户的部分,所以查询没有真正做到你需要它做的事,我的错是没有彻底阅读问题,同时我非常感谢jchong的帮助,正如jchong所说,这并不能满足要求——所以我不知道为什么它被提升了投票率?谢谢,加入看起来像是答案,但这个查询改变了不是1比1的所有可能性。我很抱歉。我不确定在连接的第二个条件中如何使用ID而不是ref。它现在应该可以工作了。这个工作很好,非常感谢你帮我解决这个问题。谢谢,加入看起来像是答案,但这个查询很可能会改变,不是1比1。我很抱歉。我不确定在连接的第二个条件中如何使用ID而不是ref。现在应该能用了。这工作做得很好,非常感谢你帮我解决这个问题。