我不确定如何正确解释我想要做什么,所以我希望标题不会太远。但我想选择范围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], ...)
答案 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')
,那么 ,
将是一种快速(但非常肮脏)的方式。