我有一个MySql表,我想查询其中 成对 的列在特定集中的行。例如,假设我的表格如下所示:
id | f1 | f2 ------------- 1 | 'a' | 20 2 | 'b' | 20 3 | 'a' | 30 4 | 'b' | 20 5 | 'c' | 20
现在,我希望提取其中 (f1,f2) 对为(’a’,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。
简而言之,我需要这样的东西:
SELECT * FROM my_table WHERE (f1,f2) IN (('a',30), ('b',20))
仅使用有效的SQL语法:-)
有任何想法吗?
那 是 有效的语法。
如果您不喜欢它,则还有其他一些选择:
SELECT * FROM my_table WHERE (f1, f2) = ('a', 30) OR (f1, f2) = ('b', 20)
或使用联接:
SELECT * FROM my_table T1 ( SELECT 'a' AS f1, 30 AS f2 UNION ALL SELECT 'b', 20 ) T2 ON T1.f1 = T2.f1 AND T1.f2 = T2.f2