Oracle --not in

最近作工程时,用到了not in,先记录下来。sql

需求:有两张表:客户表(T_customer)、客户回访表(t_returnvisit),表设计以下设计

  1. 查询回访客户列表信息
    code

  2. 查询未回访客户列表信息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)

结果以下

很明显此次查询的结果是正确的。

相关文章
相关标签/搜索