0

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

简而言之,我有 3 个tablestbl_customers tbl_customers_notes tbl_customers_pipelines

客户和注释非常明显,但管道不是。基本上,管道就是管理员分配给单个customerid.

这是管道的表结构:

身份证 | 客户ID | 管理员 |

我不必创建ID列,但我还是做了,而且它是自动递增的。

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

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

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

我在下面有一个查询,可让我搜索缺少特定管理员注释的客户 ID。而且效果很好:

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 子句之后执行了一个子查询。这确实按预期工作。我只显示具有特定注释的客户记录,并且在管道表中具有特定的管理员。

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

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

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

4

1 回答 1

5

尝试:

AND cp.ID IS NULL

代替

AND cp.adminid = 855
于 2011-12-13T20:20:24.323 回答