如何使用另一个表中的select count(id)设置LIMIT的值| MySQL

时间:2018-11-09 23:41:46

标签: mysql select limit

我有一个方案,必须限制结果,这取决于对另一个表中的id进行计数。

假设我有这两个表counterdispanser

我想selectcounter中的最后一条记录,并通过计算dispanser表中的记录数来限制选择。

类似的东西

select * from counter limit (select count(dispID) from dispanser) 

3 个答案:

答案 0 :(得分:0)

您可以尝试使用动态SQL。

设置变量@num以从dispanser表中获取金额。

准备了SQL语句CONCAT('select * from counter limit ', @num )

最终使用EXECUTE动态执行SQL。

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;

sqlfiddle

答案 1 :(得分:0)

如果不使用准备好的语句或存储过程,则无法执行此操作。来自manual

  

LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量

在存储过程中,您可以执行以下操作。 COUNT(dispID)存储到cnt中,然后将该变量用作LIMIT的参数。这是上述规则的例外。

DELIMITER //
CREATE PROCEDURE select_counter()
BEGIN
  DECLARE cnt INT;
  SELECT COUNT(dispID) INTO cnt FROM dispanser;
  SELECT * FROM counter LIMIT cnt;
END //
DELIMITER ;

DBFiddle

答案 2 :(得分:0)

根据评论中的对话,听起来您想做的是从counter获取dispanser中每条记录的计数-如果这是错误的,请发表评论,我可以调整我的回应。实现所需内容的最佳方法是通过使用GROUP BY语法加入子查询。取决于您的架构,类似这样的事情可能会起作用:

SELECT
   d.*,
   c.total
FROM
   dispanser as d
INNER JOIN (
   SELECT
      COUNT(*) as 'total',
      dispID
   FROM
      counter
   GROUP BY
      dispID
   ) as c
   ON c.dispID = d.id