【发布时间】:2013-10-16 16:53:29
【问题描述】:
我有一个查询要获取一组当天正在运行的测验。我想确保用户尚未完成该测验。我的查询是:
SELECT qi.qiId, qi.qiTitle, qi.qiDescription, qi.qiDate, qi.qiLeague, qi.qiType, qi.qiNumQuestions
FROM quizzes qi
LEFT JOIN quizOneDaySpecials qo
ON qo.qoQuizId = qi.qiId
AND qo.qoUserId = 11
WHERE qi.qiLeague = 0
AND qo.qoIsCompleted != 1
AND qi.qiDate BETWEEN 1381878000 AND 1381964399
所有测验的详细信息都在quizzes 表中,如果用户已经开始或完成了测验,那么quizOneDaySpecials 中将存在一条记录。但是,如果用户还没有开始测验,quizOneDaySpecials 中将没有记录,这就是我的问题发生的地方。
qo.qoIsCompleted 是 NULL 如果用户还没有开始测验,并且每次我运行我的查询我都没有得到任何结果。如果我取出AND qo.qoIsCompleted != 1,则用户尚未开始的测验按预期返回。
当我签入qo.qoIscompleted != 1 后,为什么我的测验没有返回?它似乎完全有效,它不等于 1,因为它是 NULL。
【问题讨论】:
-
等于 NULL 可能会产生不同的逻辑结果,具体取决于设置...要使其不受设置影响,请尝试将该行更改为 'AND (qo.qoIsCompleted IS NOT NULL AND qo.qoIsCompleted ! = 1)'
标签: mysql sql select left-join