2015-07-06 52 views
1

我有列,ID,A和B,A表的範圍值,其中我介紹了一些值函數返回的行爲列

INSERT INTO test VALUES(1, 1, 6); 
INSERT INTO test VALUES(2, 5, 8); 
INSERT INTO test VALUES(3, 3, 4); 
INSERT INTO test VALUES(4, 4, 5); 

現在I'm尋找一個查詢,如果告訴我我傳遞給查詢的一系列數字是否在這些值之間。所以如果我通過2和3(可能是N個數字),我期望看到第1行和第3行。

到目前爲止,我實現的唯一的事情就是使用IN來知道如果我的號碼在該列中,如果更高或更低。

SELECT * FROM table WHERE A IN ('2', '3') 

我想我需要創建一個函數。有人可以在這裏指出我正確的方向嗎?

回答

1

要查找的範圍包括指定號碼的所有行:

SELECT * 
FROM test 
WHERE (2 BETWEEN A AND B) 
    OR (3 BETWEEN A AND B) 
/* OR (4 BETWEEN A AND B) */ 
/* OR (5 BETWEEN A AND B) */ 
+------+------+------+ 
| ID | A | B | 
+------+------+------+ 
| 1 | 1 | 6 | 
| 3 | 3 | 4 | 
+------+------+------+ 

另一種解決方案是JOIN您的表格中有數字列表:

SELECT DISTINCT test.* 
FROM test 
INNER JOIN (
    SELECT 2 AS num UNION ALL 
    SELECT 3 /* UNION ALL 
    SELECT 4 UNION ALL 
    SELECT 5 */ 
) AS num_list ON num_list.num BETWEEN test.A AND test.B 
+0

mmmm文章似乎將值的範圍設置爲靜態。那麼如果這些價值可以修改,那麼我們需要首先設置這些值?怎麼樣,帶一個功能?這篇文章根本不清楚 – paul

+0

(在你的問題中)2和3從哪裏來?通常你會建立一個SQL查詢,比如''query =「SELECT * FROM test WHERE」。 $結束。 「> ='A' AND'B'> =」。 $開始。 「;'' –

+0

來自使用該應用程序的客戶端,他可以使用具有[N]個值範圍的查詢 – paul

-2

利用之間

SELECT * FROM表,其中A 1和3之間

+0

這是如何與OP問題相關的 - 他想要傳遞值列表[(2,3)在示例中]並找回包含這些值的行(在A和B之間)。 – PaulF