是否可以在WHERE子句中使用forloop,例如
SELECT
name,
surname,
id
FROM person
WHERE (while(x < 5)) = id
然后结果将具有从1到4的id .5可以有值列表或数组。
这甚至可能吗?
PS。该例子可以通过使用WHERE 5&gt;来完成。 ID
我只是想知道这是否可以通过循环完成,我将在jasper报告中使用此查询片段
答案 0 :(得分:3)
你的意思是:
SELECT name, surname, id
FROM person
WHERE id in(1, 2, 3, 4);
如果这个数字列表来自一个数组或一个列表,你可以从前端应用程序中组成这个列表,或者从这些值创建一个临时表,并用它JOIN
表。
答案 1 :(得分:2)
使用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;
......但效率不高。
答案 2 :(得分:2)
根据您的评论:
5可以有一个值列表或一个数组
你可能会遇到这样的事情:
select id, name, surname
from person
where find_in_set(id, '1,2,3,4') > 0;
SQLFiddle示例:http://sqlfiddle.com/#!2/7186d/3
答案 3 :(得分:0)
你可以使用一个简单的查询,在这样的条件下,它正是你要求的,我的意思是循环的替代。执行查询时,这不需要循环,它像循环
一样执行SELECT
p.name,
p.surname,
p.id
FROM person p
WHERE p.id < 5
这将检查id为1到4的记录
答案 4 :(得分:0)
如果您知道要从哪里获取数据,可以使用BETWEEN命令。如下面的命令......
SELECT name, surname, id FROM person WHERE id BETWEEN 1 AND 5 ;