Mysql 为什么这些查询会产生不同的结果?

Mysql 为什么这些查询会产生不同的结果?,mysql,Mysql,我运行了这两个查询,看起来它们做了相同的事情,但给出了不同的结果: SELECT COUNT(stage1) AS total FROM progress_status WHERE stage1 = 3 AND stage2 != 3 AND stage3 !=3 AND stage4 !=3 AND stage5 !=3; # total = 90 SELECT COUNT(stage1) AS total FROM progress_status WHERE stage1 =

我运行了这两个查询,看起来它们做了相同的事情,但给出了不同的结果:

SELECT COUNT(stage1) AS total 
FROM progress_status 
WHERE stage1 = 3 
AND stage2 != 3 AND stage3 !=3 AND stage4 !=3 AND stage5 !=3;

# total = 90

SELECT COUNT(stage1) AS total 
FROM progress_status 
WHERE stage1 = 3 
AND (stage2,stage3,stage4,stage5) != (3,3,3,3)

# total = 314
这很正常:

  • 第一个查询要求所有阶段列与3不同
  • 您的第二个查询同时询问那些不等于3的列, 因此,如果一个与3个不同,则记录被获取! 这个查询就像在
    WHERE
    子句中使用

(第二阶段、第三阶段、第四阶段、第五阶段)!=(3,3,3,3)
stage2!=第三阶段或第三阶段=第三阶段或第四阶段=第三阶段或第五阶段=3

第二个是:

AND (stage2 != 3 OR stage3 !=3 OR stage4 !=3 OR stage5 !=3);

你只是做了一个毫无根据的断言,然后问为什么它不成立。我们需要更多地了解你的假设,以及你为什么做出这些假设。@TomalakGeret'kal你应该在评论之前阅读答案。他说得很对,这是一个很好的问题。@Ariel:这是一个修辞性的评论,基于问题本身和答案之间的隔离。这个问题缺乏足够的细节来被认为是“好的”,也没有被精确地提出(尽管在这种情况下,你是对的,他的意图在很大程度上可以猜测,这不是重点)。我试图教OP写一些东西,比如“我期望X是因为Y,但我看到了Z。为什么?我能看到X吗?Y是不是有点无效?”,而不仅仅是“Bluerueghlgh”@TomalakGeret'kal对不起,我看不到你没有看到的东西。对我来说,这个问题非常清楚。也许是因为我已经知道这些元组比较的工作方式。@Ariel:这与主题无关!这是关于质量的问题。有一个不合逻辑的断言(“他们看起来做了相同的事情,但给出了不同的结果”?!)并且没有进一步的推理或评论,这使得这是一个格式不正确的问题。你能用文档中的参考来支持这一点吗?这只是目前的另一种说法。不,我不能,我花了很长时间寻找。就我所能找到的而言,它是没有文档记录的(尽管我记得在什么地方读过它,但我就是找不到)。我发现论坛帖子要求提供文档,回答是“不是”。我能找到的最接近的表达式是处理子查询的,因此它并不完全相同,但基本上这些类型的表达式使用
ANY
运算符。如果你需要一个搜索键,它被称为元组比较——有很多stackoverflow线程,但我找不到任何官方的@汤玛拉基雷特卡尔头奖你激励我继续寻找:)但那页说它是
,而不是