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

简而言之,我有3个tables
tbl_customers
tbl_customers_notes
tbl_customers_pipelines

客户和Notes很明显,但管道却不明显。基本上,管道就是管理员分配给单个customerid的对象。

这是管道的表结构:


  ID |客户ID | adminid |


我不必创建ID列,但是无论如何我都做了,并且它是自动递增的。

每个客户记录都是从没有加入管道记录开始的。因此,在首次创建customerid时为空。如果要分配管理员来管理该新的customerid,只需为每个adminid添加一条记录:

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


这意味着customerid:45已分配了3个adminid。
(顺便说一句,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子句之后执行子查询。这确实按预期工作。我只显示具有特定注释并在管道表中具有特定adminid的客户记录。

我想做相反的事情。
并搜索完全缺少管道/管理员记录的客户记录。
我本质上是在寻找有注释但没有adminid的customerid。
这就是我在构建查询时遇到的困惑的地方。

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

而且不会产生任何结果。但是确实有记录。因此查询刚刚结束。
有人看到我想念的东西吗?

最佳答案

尝试:

AND cp.ID IS NULL


代替

AND cp.adminid = 855

关于mysql - MySQL-搜索NULL值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8495537/

10-13 23:15