最近作工程時,用到了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)
結果以下
很明顯此次查詢的結果是正確的。