所以我有一个表格将IP链接到名为tblIPMessageLink
它包含投票或标记的IP,以及“投票”和“标记”的位列。
getMessages
proc位于
SELECT
m.message,
m.votes,
m.messageId,
ml.voted,
ml.flagged,
NULL as rows
FROM
tblMessages m
left join tblIPMessageLink ml on m.messageid = ml.messageid
WHERE
m.timestamp >= DATEADD(day, DATEDIFF(day, 0, @date), 0)
and
m.timestamp < DATEADD(day, DATEDIFF(day, 0, @date), 1)
and
datediff(hour,m.timestamp, getdate()) <= 2
ORDER BY datediff(hour,m.timestamp, getdate()) DESC
即使我执行此proc传递的链接表中不存在的IP,它仍然会被投票给该消息。它不应该,因为我从不同的IP投票。
我做错了什么?
答案 0 :(得分:0)
我相信left join
意味着查询将列出“左”(消息表)中表中的所有行,并显示相应的行或来自另一个表的空值(链接表) )。如果您将结果行的存在视为投票的存在,那就是您的问题。您将获取所有m
行的值以及ml.voted
和ml.flagged
的NULL。
解决方案是在sproc中切换表的位置。
答案 1 :(得分:0)
根据您的评论
它在那些中返回'真''位 案件,何时应该返回 NULL。
并且在您发布的查询中我认为问题出在数据中。除了此字段或NULL之外,对特定字段的查询无法返回任何内容。如果你看到了true,那么true就是这个字段中存储的相应MessageId的内容你可以请:
如果您提供:
,这也会有所帮助答案 2 :(得分:0)
想出来,我的连接线应该是这样的:
left join tblIPMessageLink ml on m.messageid = ml.messageid and ml.ip = @ip