这个SQL查询有什么问题

时间:2013-06-22 17:24:52

标签: mysql sql

正如标题所说..我在这个查询中找不到错误,但仍然无法正常工作

SELECT  column_1, column_2, column_3  
from `table_1`  
WHERE   `column_4` = '3'  
order by id limit 1,(count(select table_name from information_schema.tables))

请帮忙

它给出了这个错误

语法错误或访问冲突:1064 SQL语法中出错;检查与MySQL服务器版本对应的手册,以便在第1行附近使用正确的语法(count(从table_schema.tables中选择table_name))

这也无效

SELECT  column_1, column_2, column_3  
from `table_1`  
WHERE   `column_4` = '3'  
order by id limit 1,(select count(table_name) from information_schema.tables)

2 个答案:

答案 0 :(得分:1)

limit 1之后的所有内容(包括逗号)都是非法语法。

答案 1 :(得分:0)

MySQL要求LIMIT子句的参数是整数常量,而不是表达式。如果要计算它们,则必须使用预准备语句或动态SQL。 documentation的一个例子是:

SET @skip=1; SET @numrows=5;
PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?';
EXECUTE STMT USING @skip, @numrows;

因此,对于您的情况,您可以这样做:

SELECT COUNT(table_name) INTO @tables FROM information_schema.tables;
PREPARE STMT FROM 'SELECT  column_1, column_2, column_3  
                   from `table_1`  
                   WHERE   `column_4` = "3"
                   order by id limit 1, ?';
EXECUTE STMT USING @tables;