我测试了一个奇怪的查询,涉及我搜索不存在的记录.
简而言之,我有3 tables:
tbl_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
Run Code Online (Sandbox Code Playgroud)
这意味着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
Run Code Online (Sandbox Code Playgroud)
您会注意到我在WHERE子句之后执行子查询.这确实按预期工作.我只显示具有特定注释的客户记录,并在管道表中显示特定的adminid.
我想反过来做这个.
并搜索完全缺少管道/管理记录的客户记录.我基本上是在寻找有笔记的customerid,但没有附加管理员.这就是我在构建查询时遇到的一些困惑.
我唯一的想法是用"AND ISNULL(cp.ID)"替换"AND cp.adminid = 855"
这没有产生任何结果.但确实有记录.所以查询刚刚关闭.有人看到我失踪的东西吗?
尝试:
AND cp.ID IS NULL
Run Code Online (Sandbox Code Playgroud)
代替
AND cp.adminid = 855
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |