MySQL:left join 后用 on 还是 where?
在MySQL中,执行LEFT JOIN时,ON和WHERE子句的区别在于:
- ON子句用于指定JOIN的条件,它是在生成临时表时使用的条件,ON中的条件不会影响最终的结果集。
- WHERE子句用于在LEFT JOIN生成的临时表上进行过滤,条件不满足的记录会被过滤掉。
简单来说,如果你需要在JOIN操作中指定条件,使用ON;如果你需要在JOIN后的结果集中过滤数据,使用WHERE。
例子:
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id
AND b.status = 'active';
在这个例子中,ON子句用于确定如何从table_b
中获取记录,同时确保只有table_b
中关联到table_a
的记录并且其状态为'active'才会被JOIN到最终的结果集中。
如果你想要在JOIN完成后过滤结果集,可以使用WHERE子句:
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id
WHERE b.status = 'active';
在这个例子中,WHERE子句用于过滤出所有table_b
中状态为'active'的记录,即使table_b
中没有关联到table_a
的记录也会被包含在最终结果集中,但是对应于table_a
的列将会显示为NULL。
评论已关闭