mysql rownum 导致错误

mysql rownum is causing error

我正在尝试编写一个查询,如果用户在我的 table 中有超过 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
);

Error: Unknown column 'rownum' in 'where clause'

看起来您没有像错误状态那样给 SQL rownum 列以在 where 子句中查找,或者换句话说:您的子查询仅 returns "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!收获不错:)

问题是您的 rownum 不在任何 select 列表中。是来自 table 还是经过计算的行?修复您的查询取决于该问题的答案。

如果你想删除除最近十条记录以外的用户的所有记录,你可以使用类似下面的方法。

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;