当前位置: 首页 > 面试题库 >

通过多列进行SQL过滤

赵智
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 当ORDER BY基于CASE语句时,选择多个ORDER BY列的正确MS SQL语法是什么? 以下对于单列工作正常,但我需要按多列进行排序: 问题答案: 你可以试试这个

  • 问题内容: 我在JTextfield上输入了一个名称,但是我的表没有过滤任何东西! 我的代码: 问题答案: 您正在呼叫的 构造。它应该如何从filterTF中读取 文本 。我认为您应该从分配给的Action Event Listener调用它,提交(单击)文本时将调用它,如下所示: 如果要使用“根据用户键类型进行过滤”事件,请将键侦听器添加到您要输入过滤字符串的文本字段中。 但是,正如下面的注释所

  • 问题内容: 在PHP中,我知道这比使用更加安全。但是,我找不到让SQL注入发生的情况的示例。 谁能举一些例子? 问题答案: 基本上,攻击的工作方式是通过在多字节字符的中间放置反斜杠,从而使反斜杠成为有效的多字节序列的一部分而失去其含义。 本文的一般警告: 对于任何以有效多字节字符结尾的字符编码,这种攻击都是可能的,因为 可以诱使他们创建有效的多字节字符,而不是转义后面的单引号。UTF-8不适合此描

  • 问题内容: 只是想知道是否存在用于序列化对象,将其放入网络流并在另一端反序列化的教程或方法。我了解序列化,I / O,流,套接字等的原理,我只想举一个客户端向服务器发送对象的示例。 问题答案: 这(PDF)是指导您完成序列化的基础知识,及插座一个有用的教程,然后绑两个概念放在一起(大约一半通过幻灯片)来说明如何序列化对象,并从客户端发送到服务器(无RMI )。我认为这正是您想要的。

  • 本文向大家介绍sql server通过pivot对数据进行行列转换的方法,包括了sql server通过pivot对数据进行行列转换的方法的使用技巧和注意事项,需要的朋友参考一下 脚本: 脚本运行结果: 总结 到此这篇关于sql server通过pivot对数据进行行列转换的方法的文章就介绍到这了,更多相关sql server pivot行列转换内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章

  • 问题内容: 这是我当前模型的简化示例(我正在使用Flask SQLAlchemy扩展): 我正在尝试按喜欢的次数订购。 这是我基本上想发出的查询: 我只是无法在SQLAlchemy方面进行任何工作。 感谢您提供任何帮助。 问题答案: 我没有使用SQLAlchemy,所以我想尝试一下。我没有尝试使用你的模型,我只是写了一些新模型(尽管足够类似): 你想要加入likes表格,用于func.count计