是否可以在 WHERE 子句中有一个 forloop,例如
SELECT
name,
surname,
id
FROM person
WHERE (while(x < 5)) = id
那么结果将具有从 1 到 4 的 id。5 可以具有值列表或数组。
这甚至可能吗?
附言。这个例子可以通过使用 WHERE 5 > id 来完成
我只是想知道这是否可以通过循环来完成,我将在 jasper 报告中使用此查询片段
你的意思是这样的:
SELECT name, surname, id
FROM person
WHERE id in(1, 2, 3, 4);
如果这个数字列表来自一个数组或一个列表,您可以从前端应用程序组成这个列表,或者从这些值和JOIN
带有它的表中创建一个临时表。
你不能使用 WHERE 子句来做到这一点。您需要一个返回值的构造,以便在条件中使用它。
5 > id
返回可以在 WHERE 子句中使用的值。请注意,在存储过程中,您可以执行以下操作 -
DECLARE i INT DEFAULT 0;
WHILE i < 5 DO
SELECT * FROM table WHERE id = i;
SET i = i + 1;
END WHILE;
...但效率不高。
根据您的评论:
5 可以有一个值列表或一个数组
你可能会追求这样的事情:
select id, name, surname
from person
where find_in_set(id, '1,2,3,4') > 0;
SQLFiddle 示例:http ://sqlfiddle.com/#!2/7186d/3
如果您知道要从何处获取数据,则可以使用 BETWEEN 命令。就像下面的命令...
SELECT name, surname, id FROM person WHERE id BETWEEN 1 AND 5 ;
您可以使用带有这样的 where 条件的简单查询,这正是您所要求的,我的意思是替代循环。这在执行查询时不需要循环,它像循环一样执行
SELECT
p.name,
p.surname,
p.id
FROM person p
WHERE p.id < 5
这将检查 id 从 1 到 4 的记录