我在寻找MYSQL查询,而不是PLSQL查询。
select * from aadhar limit (select count(*)/2 from aadhar);我试着喜欢这个,但是遇到这个错误,请帮忙
错误代码: 1064。您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行“
(select count(*)/2 from aadhar )”附近使用的正确语法。
发布于 2019-01-29 13:52:41
就像已经解释过的其他答案一样,不能在查询中动态设置LIMIT。
但是您可以使用MySQL用户变量和执行相结合来解决这个问题。
SET @count = (SELECT COUNT(*)/2 FROM aadhar);
SET @sql = CONCAT('SELECT * FROM aadhar LIMIT ', @count);
PREPARE q FROM @sql;
EXECUTE q;
DEALLOCATE PREPARE q;或(最安全的选项)
SET @count = (SELECT COUNT(*)/2 FROM aadhar);
PREPARE q FROM 'SELECT * FROM aadhar LIMIT ?';
EXECUTE q USING @count;
DEALLOCATE PREPARE q;额外警告
请注意,根据定义,SQL是无命令的。使用没有meaningless.的LIMIT而不使用ORDER BYSQL可以自由地返回按anny顺序匹配的记录,而不需要ORDER BY,这意味着运行相同的查询两次可能会导致不同的结果。
另外,最好使用CEIL()或CAST(),它将一个双值转换成一个int,这样当表有奇数关闭记录并使用像这个SELECT * FROM aadhar LIMIT 1.500000000那样的双值生成SQL时,方法就不会出错。
关于如何做到这一点,请参见演示
发布于 2019-01-29 13:51:34
也许不是您想要的,但是-‘在存储的程序中,可以使用整数值例程参数或MySQL 5.5.6中的局部变量指定限制参数’https://dev.mysql.com/doc/refman/5.5/en/select.html。
如果您不想使用动态sql或存储过程,但您确实有某种方法来排序您的表,那么行号模拟(预版本8)或row_number窗口函数(Version8 on)可能会有所帮助。给定的
+-----+----------+
| id | username |
+-----+----------+
| 1 | aaa |
| 2 | Jane |
| 3 | Ali |
| 6 | Bruce |
| 7 | Martha |
| 8 | Sidney |
| 10 | charlie |
| 12 | Elisa |
| 14 | Samantha |
| 15 | Hannah |
| 16 | Hannah |
| 17 | Kevin |
| 999 | bob |
+-----+----------+
13 rows in set (0.00 sec)
SELECT S.ID,S.USERNAME FROM
(
SELECT U.ID,U.USERNAME,
@RN:=@RN+1 ROWNUMBER,
(SELECT ROUND(COUNT(*)/2) FROM USERS) TOPN
FROM USERS U
CROSS JOIN (SELECT @RN:=0) R
ORDER BY U.ID
) S
WHERE S.ROWNUMBER <= S.TOPN;会导致
+----+----------+
| ID | USERNAME |
+----+----------+
| 1 | aaa |
| 2 | Jane |
| 3 | Ali |
| 6 | Bruce |
| 7 | Martha |
| 8 | Sidney |
| 10 | charlie |
+----+----------+
7 rows in set (0.00 sec)发布于 2019-01-29 13:45:38
在MySQL中没有选择和显示表中总记录的一半的规定,除非您明确指定标量在限制子句中。
https://stackoverflow.com/questions/54422411
复制相似问题