从子查询结果中获取 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 BY
是 not 保证每次都能得到相同的结果。您应该在 ROW_NUMBER
window 函数的 OVER
部分包含一个 ORDER BY
子句。使用我的演示中的示例数据,您可以使用类似:
ROW_NUMBER() OVER (ORDER BY mark DESC)
我想在我的查询中使用 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 BY
是 not 保证每次都能得到相同的结果。您应该在 ROW_NUMBER
window 函数的 OVER
部分包含一个 ORDER BY
子句。使用我的演示中的示例数据,您可以使用类似:
ROW_NUMBER() OVER (ORDER BY mark DESC)