虽然数据正确,但查询结果出乎意料
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
表中的数据后,查询条件满足并应工作。
我不知道可能的原因。任何有关出了什么问题以及如何纠正的指示都将非常有帮助。
上述查询执行以下操作,
它获得当前用户发起/接收的对话,并从其他表中获取消息内容。它获得状态为Delete
或Active
的消息,但状态不是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 文件,但结果出乎意料 第二个站点未正确加载
在我的查询中使用 Point() 会产生奇怪的结果,是我用错了还是意料之中?