最近作工程时,用到了not in,先记录下来。sql
需求:有两张表:客户表(T_customer)、客户回访表(t_returnvisit),表设计以下设计
查询回访客户列表信息
code
查询未回访客户列表信息it
需求1分析:很明显,只须要用客户表的cstm_id与回访表的cstm_id等上便可。SQL以下class
select distinct tc.* from t_customer tc,t_returnvisit tr where tc.cstm_id = tr.cstm_id
由于,有的客户不止被回访一次,因此在回访表里cstm_id不是惟一的,所以如上的SQL语句查出来的数据中cstm_id有重复的,而咱们须要的是用户的列表,所以,采用distinct去重。结果以下:select
需求2分析:个人思路是,既然1的需求是等上,所以2的需求应该能够是不相等,即SQL我是以下写法im
select distinct tc.cstm_Id,tc.* from t_customer tc,t_returnvisit tr where tc.cstm_id != tr.cstm_id
结果以下数据
客户表中全部的客户以下查询
至此,很明显的获得需求2的查询结果是错误的img
可是,我如今依然没找到是什么缘由。
所以,我改写了需求2的SQL以下
select distinct tc.cstm_Id,tc.* from t_customer tc,t_returnvisit tr where tc.cstm_id not in (select trt.cstm_i from t_returnvisit trt)
结果以下
很明显此次查询的结果是正确的。