首页 > 解决方案 > 为什么 IS NOT NULL 语句返回所有内容

问题描述

我正在调整现有查询以仅选择那些在 Guidelineschecked 字段中包含日期的记录。当我尝试添加 u.guidelineschecked IS NOT NULL 时,它仍然返回所有记录。

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u
WHERE t.id IN (SELECT tid FROM workertypeidlist WHERE workertypeid = 3)
  AND t.suspended = 0
  AND u.guidelineschecked IS NOT NULL;

我将查询更改为:

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u ON (t.id = u.transcriberid AND u.guidelineschecked IS NOT NULL)
WHERE t.id IN (SELECT tid FROM workertypeidlist WHERE workertypeid = 3)
AND t.suspended = 0;

并且返回的记录较少,但仍然有一些记录在 Guidelineschecked 字段中包含空值。

我会假设 IS NOT NULL 会排除任何具有空值的字段。我对 mySQL 很陌生,所以我不明白我做错了什么。

编辑:这是控制台查询结果的图像。我只想要其中有日期的记录。

数据库结果

标签: mysqlsql

解决方案


咨询了别人后,我们发现该字段实际上是用零填充的,但显示为空。我不知道为什么会这样,我的老板也不知道,但我们解决了这样的问题:

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u ON u.transcriberid = t.id
     JOIN (
SELECT tid FROM
    workertypeidlist
WHERE workertypeid = 3
) t2 on t.id = t2.tid
WHERE u.guidelineschecked > '2001-01-01';

感谢所有评论的人。我感谢你的时间和智慧。


推荐阅读