从子查询结果中获取LIMIT值



我想在查询中使用LIMIT选项,但预期的行数存储在另一个表中。这就是我所拥有的,但它不起作用:

select * from table1 limit (select limitvalue from table2 where id = 1)

当我只运行子查询时,结果是6,正如预期的那样。

如果可能的话,我更喜欢使用with语句,但这并没有奏效。提前谢谢!

您可以使用准备好的语句来从另一个表中获取查询的限制,因为limit子句不允许将非常量变量作为参数:

PREPARE firstQuery FROM "SELECT * FROM table1 LIMIT ?";
SET @limit = (select limitvalue from table2 where id = 1);
EXECUTE firstQuery USING @limit;

来自另一个后的sql查询的来源

您可以在CTE中使用MariaDB的ROW_NUMBER函数来计算要输出的行数,并将其与limitvalue进行比较。例如:

WITH rownums AS (
SELECT *,
ROW_NUMBER() OVER () AS rn
FROM table1
)
SELECT *
FROM rownums
WHERE rn <= (SELECT limitvalue FROM table2 WHERE id = 1)

注意在不使用ORDER BY的情况下使用LIMIT,不能保证每次都能得到相同的结果。您应该在ROW_NUMBER窗口函数的OVER部分中包含一个ORDER BY子句。对于我的演示中的示例数据,您可能会使用以下内容:

ROW_NUMBER() OVER (ORDER BY mark DESC)

dbfiddle 演示

最新更新