2013-01-22 101 views
1

是否有可能在WHERE子句中,像MYSQL WHERE子句中的for循環?

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

那麼結果將有編號的,從1到4。5可以有價值觀的數組列表的for循環。

這甚至可能嗎?

ps。這個例子可以通過使用完成,其中5> ID

我只是想知道這是否可以用一個循環來完成,我將使用在碧玉報告此查詢片斷

+1

這沒有意義。 WHERE子句用於建立有關結果集中每一行中列的謂詞。你通過比較,'EXISTS','IN'和其他工具來做到這一點。我無法想到任何情況下,一個循環是有道理的。也許如果你能提出一個例子,*作爲一個普通的謂詞不是可以重寫的,我們可能會提供幫助。如果你不能想到這樣一個例子,那麼它就表明這是不必要的。 –

+0

請參閱http://stackoverflow.com/questions/6226447/passing-sql-in-parameter-list-in-jasperreport –

回答

2

你的意思是這樣的:

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

如果這個數字列表來自一個數組或列表,您可以從您的前端應用程序組成這個列表,或者從這些數值中創建一個臨時表,並使用它創建一個臨時表。

+0

是的,但IN子句中的值來自列表或數組。 – noob

+0

@ user1816978您可以使用來自數組或列表的這些值,或者使用臨時表和與表「JOIN」組合這個「IN」子句。 –

+0

謝謝,這個對我更好:) – noob

0

你可以使用一個簡單的查詢來處理這樣的情況,它就是你要求的,我的意思是代替循環。當執行查詢它執行像環

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

這將檢查ID爲從1開始的記錄,以4

1

這並不需要使用循環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; 

...但它是沒有效率的。

0

如果您知道從哪裏獲取數據,您可以使用BETWEEN命令。像下面的命令基於您的評論

SELECT name, surname, id FROM person WHERE id BETWEEN 1 AND 5 ; 
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