MYSQL WHERE子句中的for循环?

时间:2013-01-22 07:19:16

标签: mysql sql

是否可以在WHERE子句中使用forloop,例如

SELECT
  name,
  surname,
  id
FROM person
WHERE (while(x < 5)) = id   

然后结果将具有从1到4的id .5可以有值列表或数组。

这甚至可能吗?

PS。该例子可以通过使用WHERE 5&gt;来完成。 ID

我只是想知道这是否可以通过循环完成,我将在jasper报告中使用此查询片段

5 个答案:

答案 0 :(得分:3)

你的意思是:

SELECT name, surname, id 
FROM person
WHERE id in(1, 2, 3, 4);

如果这个数字列表来自一个数组或一个列表,你可以从前端应用程序中组成这个列表,或者从这些值创建一个临时表,并用它JOIN表。

答案 1 :(得分:2)

使用WHERE子句不能这样做。您需要一个返回值的构造,以便在条件中使用它。

  • WHILE语句什么都不返回,它只是一个语句列表。
  • 条件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 ;