My Goal:
选择表的中间行
What have I try?
我遵循https://stackoverflow.com/a/33168093/282155中提到的方法。
下面是我的代码:
SELECT @a:=FLOOR((COUNT(*)-1)/2) FROM <Table> ORDER BY <Column>;
PREPARE STMT FROM 'SELECT * FROM <Table> LIMIT ?, 1';
EXECUTE STMT USING @a;
但是我的execute语句抛出错误:
ERROR 1210 (HY000) at line <line no>: Incorrect arguments to EXECUTE
我的观察:
- 整数的下限在预处理语句中使用时可以正常工作。例如:
FLOOR(COUNT(*)-1)
- 在Select语句中使用时,执行decimal的floor也可以正常工作:
SELECT FLOOR((COUNT(*)-1)/2) FROM <Table>;
我很困惑为什么我的代码不工作
提前感谢。
考虑使用以下等效的(但有效的)选项。
SELECT @sql := CONCAT('SELECT *
FROM <Table>
ORDER BY <Column>
LIMIT ', FLOOR((COUNT(*)-1)/2), ', 1') FROM <Table>;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
不要忘记释放语句准备。
点击这里查看演示。