DELIMITER //
CREATE PROCEDURE select_counter()
BEGIN
DECLARE cnt INT;
SELECT COUNT(dispID) INTO cnt FROM dispanser;
SELECT * FROM counter LIMIT cnt;
END //
DELIMITER ;
SET @sql = CONCAT('select * from counter order by counterID desc limit ', (SELECT count(dispID) from dispanser));
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
3条答案
按热度按时间2lpgd9681#
如果不使用准备好的语句或存储过程,则无法执行此操作。根据手册:
limit接受一个或两个数值参数,这两个参数都必须是非负整数常量
在存储过程中,可以执行以下操作。
COUNT(dispID)
存储到cnt中,然后将该变量用作LIMIT
. 这是上述规则的例外。D小提琴
t9aqgxwy2#
您可以尝试使用动态sql。
设置变量
@num
从…得到一笔钱dispanser
table。准备sql语句
CONCAT('select * from counter limit ', @num )
.最终用途
EXECUTE
动态执行sql。sqlfiddle公司
cbeh67ev3#
根据评论中的对话,听起来你想做的是从
counter
对于中的每条记录dispanser
-如果这是错误的,请评论,我可以调整我的React。最好的方法是通过将子查询与GROUP BY
语法。根据您的模式,类似的操作可能会起作用: