gpt4 book ai didi

mysql - 具有一列和多个条件的 where 子句返回一行而不是 13

转载 作者:行者123 更新时间:2023-11-29 12:09:52 25 4
gpt4 key购买 nike

我有一个简单的查询,其中包含几行和 where 子句中的多个条件,但它只返回一行而不是 13 行。没有联接,语法经过三次检查,似乎没有错误。

查询:

select column1, column2, column3
from mydb
where onecolumn in (number1, number2....number13)

结果:返回与 where 子句中的随机数关联的一行数据

花了一天的大部分时间试图解决这个问题,但现在我没有想法了。请帮忙...

最佳答案

如果没有更详细的测试用例,以及实际运行的SQL语句,这个问题无法回答。这里有一些“想法”...

<小时/>

我们的第一个猜测是,您认为将满足谓词的行实际上并不满足所有条件。

<小时/>

我们的第二个猜测是,SELECT 列表中有一个聚合表达式( COUNT()MAX()SUM() ),导致隐式 GROUP BY 。这是一个常见的“陷阱”... GROUP BY 的非标准 MySQL 扩展它允许非聚合出现在 SELECT 列表中,这些非聚合也不会作为表达式包含在 GROUP BY 子句中。当 GROUP BY 时也会出现同样的问题。子句被完全省略,并且聚合包含在 SELECT 中。列表。

但是问题没有提及 SELECT 列表中的聚合表达式。

<小时/>

我们的第三个猜测是初学者经常忽略的另一个问题:操作的优先顺序,尤其是 ANDOR 。例如,考虑以下表达式:

  a AND b OR c
a AND ( b OR c )
( a AND b ) OR c

当我们一起唱歌时,考虑一下芝麻街风格,...:“其中一个东西与其他东西不同,其中一个东西不属于...”

<小时/>

第四个猜测...如果不是因为返回的行的值为 onecolumn作为 IN 中的随机数字列表...如果它是 IN 中的第一个数字列表,我们会非常怀疑 IN 列表实际上包含一个单个字符串值,该值看起来像一个值列表,但实际上不是。

SELECT 列表中的两个表达式看起来非常相似,但它们却有很大不同:

  SELECT t.n IN (2,3,5,7)   AS n_in_list 
, t.n IN ('2,3,5,7') AS n_in_string
FROM ( SELECT 2 AS n
UNION ALL SELECT 3
UNION ALL SELECT 5
) t

第一个表达式是比较 n到四个值列表中的每个值。第二个表达式相当于 t.n IN (2) .

当新手动态创建 SQL 文本时,这是一个经常发生的错误,他们认为他们可以传入一个字符串值,并且 MySQL 会将字符串中的逗号视为 SQL 语句的一部分。

(但这并不能解释列表中的一些随机。)

<小时/>

这些都只是猜测。这些是我们看到的一些最常见的错误,但我们只是猜测。它可能完全是另一回事。以目前的形式,这个问题没有明确的“答案”。

关于mysql - 具有一列和多个条件的 where 子句返回一行而不是 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880234/

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