从子查询结果中获取 LIMIT 值

Get LIMIT value from subquery result

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

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

当我只运行子查询时,结果是6,符合预期。

如果可能的话,我更喜欢使用 WITH 语句,但那也没用。 提前致谢!

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

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

The source of the sql query from another post

您可以在 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)

注意 使用 LIMIT 而不使用 ORDER BYnot 保证每次都能得到相同的结果。您应该在 ROW_NUMBER window 函数的 OVER 部分包含一个 ORDER BY 子句。使用我的演示中的示例数据,您可以使用类似:

ROW_NUMBER() OVER (ORDER BY mark DESC)

Demo on dbfiddle