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

mysql中“ WHERE”子句中的倍数“ IN”表达式的求值

韩博厚
2023-03-14
问题内容

正在根据@Cesar的请求进行更新。希望我了解您想要的内容,如果没有,请还原。夸斯诺伊。

如果我进行这样的SQL查询:SELECT * FROM TABLE_NAME WHERE b IN (2, 7) AND c IN (3, 9),是否可以假设MySQL将仅匹配每个列表中具有相同编号的元素对?

也就是说,(2, 3)(7, 9),…?

例如,假设我们有一个像这样的表:

 + ---------- + ---------- + ---------- +
 | PK | b | c |
 + ---------- + ---------- + ---------- +
 | 1 | 2 | 3 |
 + ---------- + ---------- + ---------- +
 | 2 | 5 | 4 |
 + ---------- + ---------- + ---------- +
 | 3 | 7 | 9 |
 + ---------- + ---------- + ---------- +
 | 4 | 7 | 4 |
 + ---------- + ---------- + ---------- +
 | 5 | 2 | 9 |
 + ---------- + ---------- + ---------- +

假设返回的 唯一 行是13(而不是5)是否正确?


问题答案:
SELECT * FROM TABLE_NAME WHERE b IN(5,7) AND c IN(4,4)

这个查询将返回行,其中b要么是57,和c4

“成对评估”是什么意思?

更新:

我将在示例中再添加一行:

 +----------+----------+----------+
 |    PK    |     b    |     c    |
 +----------+----------+----------+
 |     1    |     2    |     3    |
 +----------+----------+----------+
 |     2    |     5    |     4    |
 +----------+----------+----------+
 |     3    |     7    |     9    |
 +----------+----------+----------+
 |     4    |     7    |     4    |
 +----------+----------+----------+
 |     5    |     2    |     9    |
 +----------+----------+----------+

如果要匹配整个集合,可以使用以下语法:

SELECT  *
FROM    table_name
WHERE   (b, c) IN ((2, 3), (7, 9))

这意味着:“返回所有行b2c3在同一时间,或者b79在同一时间。”

在上面的示例中,此查询将返回13

但是,如果您以其他方式重写此查询,如下所示:

SELECT  *
FROM    table_name
WHERE   b IN (2, 7)
        AND c IN (3, 9)

,这表示“将所有行都返回b27,而ANDc则为39)。

这将返回行13并且5,由于行5满足第二查询,但不是第一个条件。



 类似资料:
  • 问题内容: 我如何使它对任何数字格式和任何数字都有效 目前仅对1-999-999-9999有效 问题答案: 采用: 参考: 模式匹配

  • 问题内容: 在处理大型数据库时,哪个性能更好,还是在SQL子句中? 它们的执行方式有什么不同吗? 问题答案: 我假设您想知道以下两者之间的性能差异: 根据MySQL手册,如果值是常数,则对列表进行排序,然后使用二进制搜索。我可以想象一下,它们以不特定的顺序进行逐一评估。因此在某些情况下速度更快。 最好的了解方法是使用特定数据在数据库中同时对它们进行概要分析,以查看哪种方法更快。 我在具有10000

  • 我是QueryDSL的新手,能够在WHERE-in子句中组装具有多个列的查询,如下所示: 我有主要查询的部分: 但我不知道如何实现where子句。如何在QueryDSL中实现这一点? 提前致谢!

  • 问题内容: 我有三个表来定义用户: 我想创建一个对应用程序中的其他用户具有一定访问权限的中间层用户。为了确定已登录的用户可以访问哪些用户,我使用了如下子查询: 当前,我将子查询字符串存储在变量中,然后每次需要拉出用户列表时,将其动态插入到外部查询中。完成此操作后,我想到“最好只存储实际s 的字符串”。 因此,与其将其存储在变量中… …我实际上是执行查询并以这种方式存储结果… 然后,当我需要拉一小部

  • 问题内容: 我在mysql中的“ where in”子句中遇到问题,我无法弄清楚出了什么问题。所以我有两张桌子… 1)座位 (int)seat_id 2)寄存器 (int)register_id (varchar)seat_ids-以逗号分隔的席位,例如102,103,104 因此,我要获取匹配结果的查询是 有人可以找出问题所在吗?谢谢, 问题答案: 要求列表是文字列表,而不是逗号分隔的字符串。用

  • 问题内容: 我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是: 00 00 x1 11 我有这四个列的索引,其顺序为x0,y0,x1,y1。 我列出了大约一百种地理对组合。我将如何有效地查询此数据? 我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL: 我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助! 笔记