2013-11-26 57 views
1

我不確定如何正確解釋我正在嘗試做什麼,所以我希望標題不要太離譜。但我想選擇一切範圍IN一個範圍,其中存在另一個值IN另一個範圍,分別爲MySQL分別選擇WHERE a IN(..)和b IN(..)

這是僞代碼:

SELECT * 
FROM table t 
WHERE t.a IN (1,2,3,4,5,6,7,8,9) 
AND t.b IN (a,c,b,c,d,e,f,g,h) 

然而,我只需要選擇[1,],[2,B],[3,C]等。不是[3,h]。有沒有辦法做到這一點?
這也許能更好地解釋什麼,我試圖做的:

WHERE [t.a, t.b] IN ([1,a], [2,b], [3,c], [4,d], [5,e], [6,f], [7,g], ...) 

回答

1

... AND FIND_IN_SET(t.a,'1,2,3,4,5,6,7,8,9') = FIND_IN_SET(t.b,'a,b,c,d,e,f,g,h')將是一個快速的(但很骯髒)的方式來做到這一點,只要沒有,的在參數本身。

+1

「將是一個快速」 ---從什麼角度看快?這需要一個表格掃描 – zerkms

+1

快速,因爲在快速實施,但其實,其他選項更好。這絕不應該只是一個臨時攻擊,寫查詢是一次性工作,運行它們會不斷髮生。 – Wrikken

2

您可以使用IN多列。

你的例子就是這樣工作的:

select * 
from t 
where (a,b) in ((1,'a'), (2,'b'), (3,'c'), (4,'d'), (5,'e'), (6,'f'), (7,'g')); 
相關問題