MySQL-带子查询的限制

MySQL-带子查询的限制,mysql,Mysql,我想限制除第一行以外的所有选定行。 Id为int,但不是唯一的, 登记日期是 两个查询都有效。但后来我把它们放在一起 1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“SELECT Countproperty_id FROM table”附近使用的正确语法 也许这是限制为1的所有行的通用键,所有?Johan已经提到过 不能将子查询用作限制参数。极限参数 应该是一个整数。如果子查询返回,那么。。。基本上是 桌子 LIMIT子句可用于约束SELECT语句返回的行数。

我想限制除第一行以外的所有选定行。 Id为int,但不是唯一的, 登记日期是

两个查询都有效。但后来我把它们放在一起

1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“SELECT Countproperty_id FROM table”附近使用的正确语法

也许这是限制为1的所有行的通用键,所有?

Johan已经提到过

不能将子查询用作限制参数。极限参数 应该是一个整数。如果子查询返回,那么。。。基本上是 桌子

LIMIT子句可用于约束SELECT语句返回的行数。LIMIT接受一个或两个数值参数,这两个参数都必须是非负整数常量,但以下情况除外:

在准备好的语句中,可以使用?占位符标记

从MySQL 5.5.6开始,在存储程序中,可以使用整数值例程参数或局部变量指定限制参数

编辑

像这样试试

但我还没有接受测试

DECLARE offset bigint;
SELECT Count(property_id)-1 INTO offset FROM table;
SELECT * FROM table Order by property_id, checkIn DESC LIMIT 2,offset;

如果需要除第一行以外的所有行,请尝试以下操作:

SELECT * FROM TBL LIMIT 1, 18446744073709551615;
18446744073709551615是中推荐的值,也是无符号bigint的最大值

.

我同意,但也提供以下替代方案:

SELECT * FROM table t JOIN (
  SELECT   property_id, checkIn
  FROM     table
  ORDER BY property_id, checkIn DESC
  LIMIT    2,1
) s ON (t.property_id > s.property_id)
    OR (t.property_id = s.property_id AND t.checkIn <= s.checkIn)

如果您有唯一的id列,则可以执行以下操作:

select * FROM table 
where id <> (SELECT id FROM table Order by property_id, checkIn DESC LIMIT 1)
否则,假设属性id和签入是唯一的

select * FROM table 
where concat(property_id,'|',checkIn) <> 
     (SELECT concat(property_id,'|',checkIn)  FROM table Order by property_id, checkIn DESC LIMIT 1)

为了完整起见,以下是您如何使用准备好的声明来完成此操作:

SET @skip=1; 
SET @numrows=(SELECT Count(property_id)-1 FROM table);
PREPARE STMT FROM 'SELECT * FROM table Order by property_id, checkIn DESC LIMIT ?, ?';
EXECUTE STMT USING @skip, @numrows;
尽管如此,如果它是InnoDB表,我不建议重复对其执行SELECT COUNT*。与MyISAM不同,它不在表中存储行计数。因此,当InnoDB有很多行时,依赖InnoDB可能会很慢


注:注意,当你想跳过一行时,你必须使用限制1,how_many而不是限制2,how_many,因为它从0开始计数,而不是从1开始。

所以这里没有办法实现这一点?我的意思是显示除第一个项目外的所有项目,如果行数一直在变化?编辑:我的意思是在一个查询中只使用MySQL。它在开始声明时给了我语法错误offset@Laimonas你现在能检查一下吗?我一开始出错后就试过了。类似于1064年的错误-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行@Laimonas的“DECLARE offset bigint”附近使用的正确语法。如果只需要所有行,而不需要第一行,则不应在值之前计数。我的解决方案更有效。我在“oh I needet”子句中得到1054-未知列“t.property_id”,将第一行更改为从表中选择*作为t JOIN如果我得到正确的结果,它将显示id大于第一个的项,不过,我的案例id中的问题不是unique@Laimonas:该解释省略了最后一行,或者……在这种情况下,Id不是唯一的,所以它不会那样工作。
SET @skip=1; 
SET @numrows=(SELECT Count(property_id)-1 FROM table);
PREPARE STMT FROM 'SELECT * FROM table Order by property_id, checkIn DESC LIMIT ?, ?';
EXECUTE STMT USING @skip, @numrows;