下面是从高性能的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
加入电影
答案 0 :(得分:4)
它是一种标准的SQL模式,用于查找没有子节点的父行,在这种情况下,电影中没有演员。
它的工作原理是因为错过的左连接在错过的连接行中具有所有空值,并且在连接完成后评估了where子句。将连接行中实际上不为null的列指定为null将仅返回mussed连接。
另请注意,您不需要distinct
,因为只有一个此类行会因错过的联接而返回。