MySQL - 搜索NULL值

时间:2011-12-13 20:13:34

标签: mysql isnull

我测试了一个奇怪的查询,涉及我搜索不存在的记录。

简而言之,我有3 tablestbl_customers tbl_customers_notes tbl_customers_pipelines

客户和笔记非常明显,但管道不是。基本上,管道就是管理员分配给单个customerid的那些。

以下是管道的表结构:

  

ID | customerid | adminid |

我没有必要创建ID列,但无论如何我做了,它会自动增加。

每个客户记录都以没有加入管道记录开始。因此,首次创建customerid时它是空的。如果我想指派管理员来管理新的customerid,只需为每个管理员添加一条记录:

ID  | customerid | adminid
---------------------------
1   |    45      |   6
2   |    45      |   8
3   |    45      |   10

这意味着customerid:45分配了3个adminid (顺便说一下,adminid就像销售人员一样)

我在下面有一个查询,可以让我搜索来自特定管理员的缺少备注的customerid。而且效果很好:

SELECT c.*
FROM `tbl_customers` c 
LEFT JOIN `tbl_customers_pipelines` cp ON c.customerid = cp.customerid 
WHERE c.customerid 
          NOT IN(SELECT n.customerid 
                 FROM `tbl_customers_notes` n 
                 WHERE n.datesubmitted BETWEEN '2011-12-01 14:00:00' 
                 AND '2011-12-03 13:59:59' 
                 AND n.categoryid IN(10)
                )

AND cp.adminid = 855 

你会注意到我在WHERE子句之后执行子查询。这确实按预期工作。我只显示具有特定注释的客户记录,并在管道表中显示特定的管理。

我想反过来做这个。
并搜索完全缺少管道/管理记录的客户记录。 我基本上是在寻找有笔记的customerid,但没有附加管理员。 这就是我在构建查询时遇到的一些困惑。

我唯一的想法是用“AND ISNULL(cp.ID)”替换“AND cp.adminid = 855”

这不会产生任何结果。但确实有记录。所以查询刚刚关闭。 有人看到我遗失的东西吗?

1 个答案:

答案 0 :(得分:5)

尝试:

AND cp.ID IS NULL

而不是

AND cp.adminid = 855