小编典典

通过多列进行SQL过滤

sql

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

有任何想法吗?


阅读 176

收藏
2021-03-23

共1个答案

小编典典

有效的语法。

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

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
2021-03-23