我想在查询中使用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 演示