mysql rownum导致错误

时间:2016-05-04 03:04:01

标签: mysql rownum

我尝试编写一个查询,如果我的表中有超过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;

2 个答案:

答案 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;