我试图在train_stations表中找到最后插入的记录

时间:2014-05-06 18:21:18

标签: mysql subquery

SET @v100 :=(select count(*) from train_stations); select * from train_stations limit (select @v100)-1,1; 错误:错误代码:1064。您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的“@ v100,1”附近使用正确的语法

这个没有用户变量的查询也没有工作
 select * from train_stations limit (select count() from train_stations)-1,1; 错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'(选择计数()from train_stations)附近使用正确的语法)-1,1'在第1行

2 个答案:

答案 0 :(得分:1)

您无法在LIMIT中使用用户定义的变量。相反,您可以使用PREPARE STATEMENT。下面的例子

PREPARE STMT FROM 
" SELECT * FROM tab LIMIT ?,1 "; 
select @START := count(*) from tab; 
set @START := @START - 1;
select @START;
EXECUTE STMT USING @START;
DEALLOCATE PREPARE STMT;

这里的演示小提琴http://sqlfiddle.com/#!8/ae474/11

修改

基本上,您正在尝试获取表格中的最后一条记录,您可以使用ORDER BY子句轻松完成该记录,例如

select * from train_stations order by some_id desc limit 1

答案 1 :(得分:0)

为什么不在表中放置id列或时间戳列?在MySQL中没有诸如行的“自然顺序”这样的东西,你试图依赖它。

然后所有的魔法都会崩溃到

select * from train_stations order by id desc limit 1;

select * from train_stations order by insert_tmstmp desc limit 1;
编辑:你的方法的一个大问题是MySQL必须遍历train_stations的每一行只是为了抛弃它们而只保留最后一行。最好只告诉MySQL你想要直接输入这一行。