什么是以下左连接sql语句呢?

时间:2014-12-21 01:34:19

标签: mysql

下面是从高性能的mysql书中复制的:

select film.film_id from sakila.film 
left outer join sakila.film_actor using(film_id) 
where film_actor.film_id is null;

我无法理解它在做什么。 where子句是否在加入之前过滤film_actor。如果是这样,联接如何执行(film_id已经为空,如何使用film_id加入电影

1 个答案:

答案 0 :(得分:4)

它是一种标准的SQL模式,用于查找没有子节点的父行,在这种情况下,电影中没有演员。

它的工作原理是因为错过的左连接在错过的连接行中具有所有空值,并且在连接完成后评估了where子句。将连接行中实际上不为null的列指定为null将仅返回mussed连接。

另请注意,您不需要distinct,因为只有一个此类行会因错过的联接而返回。