我有一个MySql表,我想查询其中对列在特定集合中的行。 例如,假设我的表看起来像这样:多列SQL过滤
id | f1 | f2
-------------
1 | 'a' | 20
2 | 'b' | 20
3 | 'a' | 30
4 | 'b' | 20
5 | 'c' | 20
现在,我希望提取的行,其中该对(F1,F2)要么( '一个',30)或( 'B' ,20),即行2,3,4。我也希望使用'IN'样式过滤器,因为我可能有许多对要获取。如果我尝试类似:
SELECT * FROM my_table WHERE f1 IN ('a','b') AND f2 IN (30, 20)
我得到了在IN子句f1和f2指定的值的笛卡尔乘积,即与所有可能的组合为F1 =“A”或“B”的行,并且f2 = 30,20,因此行1也被选择。
总之,我需要的是这样的:只有一个有效的SQL语法:-)
任何想法
SELECT * FROM my_table WHERE (f1,f2) IN (('a',30), ('b',20))
?
大声笑,我有有效的语法all al翁。在MySql中验证。谢谢! – bavaza 2010-12-21 15:01:04
让我们来提高赌注:假设我有一个索引列(f1,f2)。使用EXPLAIN短语,我看到MySql使用索引进行单个比较(例如(f1,f2)=('a',30)),但不是'IN'语法。有什么想法吗? – bavaza 2010-12-23 15:05:26
@bavaza:这听起来像一个有趣的问题。我建议你把它作为一个新问题发布(而不是评论),以便它可以被更多人看到。 – 2010-12-23 15:14:32