虽然数据正确,但查询结果出乎意料

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虽然数据正确,但查询结果出乎意料相关的知识,希望对你有一定的参考价值。

我已遵循两个表的消息传递功能-

message2_recips表:

mid seq uid status
1   1   1   N
1   1   503 A

message2

mid seq created_on           created_on_ip  created_by  body
1   1   2013-08-08 19:17:44   1.2.2.1       503          some_random_text

我正在触发此查询-

SELECT m.mid, m.seq, m.created_ON, m.created_by, m.body, r.status 
        FROM message2_recips r
INNER JOIN message2 m ON m.mid=r.mid AND m.seq=r.seq 
WHERE r.uid=503 AND r.status in ('A', 'N') AND r.seq=(SELECT max(rr.seq) 
        FROM message2_recips rr 
WHERE rr.mid=m.mid AND rr.status in ('A', 'N')) AND IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
ORDER BY created_ON DESC

预期结果是-

mid seq created_on                  created_by  body                status
1   1   2013-08-08 19:17:44          503        some_random_text    A

但是它返回零结果

但是,如果我从查询中删除了if条件IF (m.seq=1 AND m.created_by=503, 1=0, 1=1),则会得到正确的结果。但是查询message2表中的数据后,查询条件满足并应工作。

我不知道可能的原因。任何有关出了什么问题以及如何纠正的指示都将非常有帮助。


上述查询执行以下操作,

它获得当前用户发起/接收的对话,并从其他表中获取消息内容。它获得状态为DeleteActive的消息,但状态不是New。它使用最大序列号的最新消息过滤我们的对话。每条消息确实都有自己的序列号,而且格式越来越多。

这确实有效,但是因为这是消息传递的“收件箱”功能,我希望用户能够看到自己发起的对话。目前,上述查询无法正常进行,他只有在收到其他用户的回复后才能看到他发起的对话。

答案

您的预期结果符合IF的标准:

IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)

因此,上面的表达式返回1=0,它为假,因此将忽略该行。

更具可读性的可能是将其简单地添加到WHERE子句中:

AND NOT (m.seq=1 AND m.created_by=503)

如果您打算使原始IF为真,则删除NOT。>

以上是关于虽然数据正确,但查询结果出乎意料的主要内容,如果未能解决你的问题,请参考以下文章

虚拟主机问题。有两个 vhost 文件,但结果出乎意料 第二个站点未正确加载

matlab中的FFT,出乎意料的结果

嵌套片段数据在中继中始终相同

在我的查询中使用 Point() 会产生奇怪的结果,是我用错了还是意料之中?

何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?

何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?