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

时间:2015-06-17 00:00:23

标签: mysql

我有一个简单的查询,在where子句中有几行和多个条件,但它只返回一行而不是13.没有连接,语法被三重检查,似乎没有错误。

查询:

new Thread(new Runnable() {
    @Override
    public void run() {
        viewStub.inflate();
        initFragment();
    }
}).start()

结果: 返回与where子句

中的随机数相关联的一行数据

花费了大部分时间试图弄清楚这一点,现在已经没有想法了。请帮忙......

1 个答案:

答案 0 :(得分:1)

如果没有更详细的测试用例,以及实际运行的实际SQL语句,则无法回答此问题。以下是一些"想法" ...

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

我们的第二个猜测是,您在SELECT列表中得到了一个汇总表达式(COUNT()MAX()SUM()),导致隐式{{ 1}}。这是一个常见的"陷阱" ... GROUP BY的非标准MySQL扩展,它允许非聚合出现在SELECT列表中,它们也不包含在GROUP BY中的表达式中条款。当完全省略GROUP BY子句并且GROUP BY列表中包含聚合时,会出现同样的问题。

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

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

OR

当我们唱歌时,芝麻街的风格,......:"其中一件事与其他事情不一样,其中一件事并不属于......&#34 ;

第四个猜测......如果在 a AND b OR c a AND ( b OR c ) ( a AND b ) OR c 列表中返回的行的值为onecolumn作为随机号码,则不是。 ..如果它是IN列表中的第一个号码,我们非常怀疑IN列表实际上包含单个字符串值看起来像列出一个值,但实际上并非如此。

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

IN

第一个表达式是将 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

当新手动态创建SQL文本时,这种情况经常出现,认为他们可以传入字符串值,并且MySQL会在字符串中看到逗号作为SQL语句的一部分。

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

这些都是猜测。这些是我们看到的最频繁的旅行,但我们只是在猜测。它可能完全是另一回事。在目前的形式中,没有确定的答案"问题。