LEFT JOIN 中 ON 和 WHERE 的区别

LEFT JOIN 中 ON 和 WHERE 的区别

在进行left join 查询时,会先根据on进行查询得到一张临时表,where的作用是对临时表进行条件查询。

这是因为on的优先级高于where

/*左外连接生成的临时表*/
SELECT s.* ,c.sender_time,c.sender_user_name FROM  subject_center s
LEFT JOIN comment_center c
ON s.accept_comment_id=c.id

临时表包含subject_center的所有数据,从comment_center表中得到的sender_time,sender_user_name如果符合on条件,那么有数据,否则无数据。


/*对临时表进行条件查询*/
SELECT s.* ,c.sender_time,c.sender_user_name FROM  subject_center s
LEFT JOIN comment_center c
ON s.accept_comment_id=c.id
WHERE s.is_delete=0 AND s.is_check=1;

临时表生成以后,where的条件就会对临时表进行查询。这时候需要注意,如果where后的条件指向的是从comment_center得到的字段,查到的数据可能是错的(因为其中可能有空),一般的来讲,where后的条件指向主表subject_center。

你可能感兴趣的:(LEFT JOIN 中 ON 和 WHERE 的区别)