而使用 ON 时,字段就会出现两次:
| SELECT * FROM film JOIN film_actor ON film.film_id = film_actor.film_id WHERE actor_id = 17 AND film.length > 120 LIMIT 1G *************************** 1. row *************************** film_id: 96 title: BREAKING HOME description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft release_year: 2006 language_id: 1 original_language_id: NULL rental_duration: 4 rental_rate: 2.99 length: 169 replacement_cost: 21.99 rating: PG-13 special_features: Trailers,Commentaries last_update: 2006-02-15 05:03:42 actor_id: 17 film_id: 96 last_update: 2006-02-15 05:05:03 |
幕后
MySQL 对两者的处理方式是相同的,使用 EXPLAIN EXTENDED 我们可以看到:
| EXPLAIN EXTENDED SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120G *************************** 1. row *************************** ... 2 rows in set, 1 warning (0.00 sec) root@mysql-5.1.51> SHOW WARNINGSG *************************** 1. row *************************** Level: Note Code: 1003 Message: select `sakila`.`film`.`title` AS `title`,`sakila`.`film`.`film_id` AS `film_id` from `sakila`.`film` join `sakila`.`film_actor` where ( (`sakila`.`film`.`film_id` = `sakila`.`film_actor`.`film_id`) and (`sakila`.`film_actor`.`actor_id` = 17) and (`sakila`.`film`.`length` > 120) ) |
最终所有的查询都被转成了 Theta 风格。
译者:就是说这三种方式除了写法不同外,没什么区别。










