如何使用来自另一个 table |MySQL 的 select count(id) 设置 LIMIT 的值
how to set the value of LIMIT using select count(id) from another table |MySQL
我有一个场景,结果必须受到限制,这取决于另一个 table 中的 id 计数。
假设我有这两个 tables counter
和 dispanser
,
我想 select
table counter
中的最后一条记录,并通过计算 dispanser
table 中的记录数来限制选择。
像这样
select * from counter limit (select count(dispID) from dispanser)
你可以尝试使用动态SQL。
设置变量 @num
以从 dispanser
table 中获取金额。
准备好您的 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;
如果不使用准备好的语句或存储过程,就无法做到这一点。来自 manual:
LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants
在存储过程中,您可以这样做。 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 ;
根据评论中的对话,听起来您想要做的是从 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
我有一个场景,结果必须受到限制,这取决于另一个 table 中的 id 计数。
假设我有这两个 tables counter
和 dispanser
,
我想 select
table counter
中的最后一条记录,并通过计算 dispanser
table 中的记录数来限制选择。
像这样
select * from counter limit (select count(dispID) from dispanser)
你可以尝试使用动态SQL。
设置变量 @num
以从 dispanser
table 中获取金额。
准备好您的 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;
如果不使用准备好的语句或存储过程,就无法做到这一点。来自 manual:
LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants
在存储过程中,您可以这样做。 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 ;
根据评论中的对话,听起来您想要做的是从 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