多列SQL过滤

bav*_*aza 5 mysql sql

我有一个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 语法 :-)

有任何想法吗?

Mar*_*ers 6

有效的语法。

如果您不喜欢它,还有其他选择:

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)

  • 哈哈,我一直都有有效的语法。在 MySql 中验证。谢谢! (2认同)