我有一个这样的表(MySQL 5.0.x,MyISAM):
response{id, title, status, ...} (status: 1 new, 3 multi)
如果至少有 20 个标题相同,我想将所有响应的状态从 new ( status=1
) 更新为 multi ( )。status=3
我有这个,但它不起作用:
UPDATE response SET status = 3 WHERE status = 1 AND title IN (
SELECT title FROM (
SELECT DISTINCT(r.title) FROM response r WHERE EXISTS (
SELECT 1 FROM response spam WHERE spam.title = r.title LIMIT 20, 1)
)
as u)
请注意:
- 我做嵌套选择以避免著名的
You can't specify target table 'response' for update in FROM clause
GROUP BY
出于性能原因,我不能使用。使用解决方案的查询成本LIMIT
要好得多(但可读性较差)。
编辑:
- 可以在 MySQL 中执行 SELECT FROM UPDATE 目标。在此处查看解决方案
- 问题在于选择的数据完全错误。
我发现的唯一可行的解决方案是
GROUP BY
:UPDATE response SET status = 3 WHERE status = 1 AND title IN (SELECT title FROM (SELECT title FROM response GROUP BY title HAVING COUNT(1) >= 20)
作为派生响应)
谢谢你的帮助!:)