Mysql 为什么IS NOT NULL语句返回所有内容

Mysql 为什么IS NOT NULL语句返回所有内容,mysql,sql,Mysql,Sql,我正在修改现有查询,以便只选择guidelineschecked字段中有日期的记录。当我尝试添加u.guidelineschecked不为空时,它仍然返回所有记录 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.su

我正在修改现有查询,以便只选择guidelineschecked字段中有日期的记录。当我尝试添加u.guidelineschecked不为空时,它仍然返回所有记录

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将排除任何具有NULL值的字段。我对mySQL非常陌生,所以我不明白我做错了什么

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


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

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';

谢谢大家的评论。感谢您的时间和智慧。

好的,我的mySQL有点生疏,但是,在第二个查询中,您肯定说过如果guidelineschecked不为空,不要加入它,但是对于所有未加入的记录,它们仍然在您的列表中。我相信这两个查询都会受到影响,因为第一个查询没有在任何特定的方面加入u,所以可能已经完成了t中的所有行链接到u中的所有行。。虽然我确信mySQL支持左、右、内部和外部联接,但您可能只需要通过第二次查询,将“and u.guidelineschecked is not null”移动到t.suspended=0之后的where子句,就可以得到您想要的。您确定值是
null
而不是
'
(空字符串)吗?检查的
guidelinechecked
的数据类型是什么?对于要使用的连接类型,我有点困惑。我想要transcriber中的所有记录,这些记录在用户表中有guidelineschecked。您能在这一点上帮助我吗?您的第一个联接未命中on子句,因此您正在进行交叉联接。@Solarflare,选中的guidelineschecked的数据类型是datetime。