gpt4 book ai didi

SQL 多列过滤

转载 作者:可可西里 更新时间:2023-11-01 07:33:42 25 4
gpt4 key购买 nike

我有一个 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') 和 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

关于SQL 多列过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com