2

是否可以在 WHERE 子句中有一个 forloop,例如

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

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

这甚至可能吗?

附言。这个例子可以通过使用 WHERE 5 > id 来完成

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

4

5 回答 5

3

你的意思是这样的:

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

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

于 2013-01-22T07:20:42.153 回答
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;

...但效率不高。

于 2013-01-22T07:33:05.827 回答
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

于 2013-01-22T07:40:45.757 回答
1

如果您知道要从何处获取数据,则可以使用 BETWEEN 命令。就像下面的命令...

   SELECT name, surname, id FROM person WHERE id BETWEEN 1 AND 5 ;
于 2013-01-22T07:34:57.467 回答
0

您可以使用带有这样的 where 条件的简单查询,这正是您所要求的,我的意思是替代循环。这在执行查询时不需要循环,它像循环一样执行

SELECT
    p.name, 
    p.surname, 
    p.id
FROM person p
WHERE p.id < 5  

这将检查 id 从 1 到 4 的记录

于 2013-01-22T07:28:55.207 回答