MySQL分别选择WHERE IN(..)AND b IN(..)

时间:2013-11-26 23:37:29

标签: mysql

我不确定如何正确解释我想要做什么,所以我希望标题不会太远。但我想选择范围IN的所有内容,其中另一个值存在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,a],[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], ...)

3 个答案:

答案 0 :(得分:3)

Mysql 支持这样的语法:

WHERE (t.a, t.b) IN ((1, 'a'), (2, 'b'), ...)

UPD:

由于一些有趣的原因,我在文档中找不到它:-S

虽然有一些信誉良好的资源引用它:http://www.mysqlperformanceblog.com/2008/04/04/multi-column-in-clause-unexpected-mysql-issue/

答案 1 :(得分:2)

您可以将IN用于多个列。

你的例子会这样:

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

答案 2 :(得分: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'),那么

,将是一种快速(但非常肮脏)的方式。