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)

結果以下

很明顯此次查詢的結果是正確的。

相關文章
相關標籤/搜索