我尝试编写一个查询,如果我的表中有超过10行,则会删除用户最早的行(已查看汽车的记录)。
我使用rownum收集1-10中的项目(将从删除中排除)...但是rownum导致错误(如下所示)。
任何人都可以帮我解决此错误或提出不同的方法吗?
DELETE FROM `my_table` WHERE `car_id` NOT IN
( SELECT alias_table.`car_id` FROM
( SELECT `car_id` FROM `my_table` ORDER BY `id` DESC ) AS alias_table
WHERE rownum < 10 AND user_id = 0
);
错误:未知列&#39; rownum&#39;在&#39; where子句&#39;
答案 0 :(得分:1)
看起来你没有给SQL提供rownum列来查找where子句,比如错误状态,或者换句话说:你的子查询只返回“car_id”并且不包括rownum。
如果你包括rownum,例如:
DELETE FROM `my_table` WHERE ``car_id`` NOT IN
( SELECT alias_table.``car_id`` FROM
( SELECT ``car_id``, @rownum:=@rownum+1 as rownum FROM ``my_table``, (select @rownum:=0) tmp ORDER BY `id` DESC ) AS alias_table
WHERE rownum < 10 AND user_id = 0
);
然后你的查询应该有效,假设你的其余语法对你的mysql版本是正确的。
希望有所帮助!
感谢Reno抓住我的错误并实际宣布rownum!好抓:)
答案 1 :(得分:1)
问题是你的rownum不在任何选择列表中。是从表中还是计算出的行?修复查询取决于该问题的答案。
如果要删除最近十条记录以外的用户的所有记录,可以使用以下内容。
DELETE FROM my_car WHERE id NOT IN (SELECT temp.id FROM (SELECT id FROM my_car mc WHERE mc.user_id = 1 ORDER BY mc.id DESC LIMIT 10) AS temp) AND user_id = 1;