我有一个MySQL表,我想查询其行对列的是一组特定的。例如,假设我的表如下所示:
id | f1 | f2
-------------
1 | 'a' | 20
2 | 'b' | 20
3 | 'a' | 30
4 | 'b' | 20
5 | 'c' | 20
Run Code Online (Sandbox Code Playgroud)
现在,我希望提取对(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)
Run Code Online (Sandbox Code Playgroud)
或者使用连接:
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
Run Code Online (Sandbox Code Playgroud)