天天看點

MySQL SQL語句之join 過濾注意事項

 對于SQL語句的JOIN語句,大家并不陌生。關于其中的where語句中進行内容過濾還是在 On 語句中或者having進行過濾,這個是值得注意的。

      案例:找出某段時間内注冊的新使用者,沒有通過新手任務當中具體哪一步任務,統計

      其中涉及到兩張表

      使用者基礎表:user_base,  user_id, 注冊時間 created_at

      任務表: user_id,task_id,task_status

      A 語句:

      select  min(b.task_id) life,task_status,  a.user_id from user_tasks b  join  (select user_id from  user_bases where created_at  between '   '  and  '   ' ) a  on a.user_id=b.user_id group by a.user_id having  b.task_status<3;

     B語句:

     select min(task_id),task_status,a.user_id from user_tasks b join (select user_id from  user_bases where created_at between '  '  and  '  '  ) a  on a.user_id=b.user_id  and task_status<3 group by user_id;

     A,B語句最大的差别是對 task_status<3 進行過濾的先後順序。

     A,語句中表内容進行連結比對時,以user_id為準,找出每個使用者的task_id,最後是 having  task_status<3 過濾

     B,語句是表内容進行比對時,task_status<3進行join并且按照group by  求出每個使用者min  task_id.

      是以B語句是符合标準的。

      對于Join 進行連結時,要确定好以哪些字段進行過濾内容!

本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1117069,如需轉載請自行聯系原作者