在研究
AS
语句时,我了解到它是在查询结束时执行的。因此,如果我尝试在如下查询中使用别名:
select film as movie from films where movie = "3 Idiots";
然后它给了我一个错误,这是预期的,因为
AS
语句只是在输出时执行,但如果我对子查询执行相同的操作,例如:
select title,
first_name,
last_name
from film
INNER JOIN ( select first_name,
last_name,
film_id
from actor
INNEr JOIN film_actor ON actor.actor_id = film_actor.actor_id
) As actor_info ON film.film_id = actor_info.film_id
Where actor_info.first_name = 'Nick'
AND`walker` actor_info.last_name = 'Wahlberg';
然后就可以正常工作了。谁能帮我理解这个概念吗?
原因是
WHERE
子句在 SELECT
子句之前求值,因此 aliases 不可在同一查询的 WHERE
子句中使用。因此,您不能在 WHERE 子句中使用 movie,如下例所示:
SELECT film AS movie
FROM films
--WHERE movie = "3 Idiots" --movie is not a valid column name
WHERE film = "3 Idiots"; --film is a valid column name
但是子查询是在外部查询之前处理的,因此它可以在
WHERE
子句中使用。
SELECT title,
first_name,
last_name
FROM film
INNER JOIN (
SELECT first_name,
last_name,
film_id
FROM actor
INNER JOIN film_actor
ON actor.actor_id = film_actor.actor_id
) AS actor_info
ON film.film_id = actor_info.film_id
WHERE actor_info.first_name = 'Nick' --actor_info is valid because it's been processed in the inner query
AND actor_info.last_name = 'Wahlberg';
使用 SQL 时,AS 关键字通常用于为列或表添加别名,但不为单个记录添加别名。在您的查询中,您似乎正在尝试使用 AS 为电影标题添加别名,这不是该关键字的有效使用。以下是您如何在不使用 AS 的情况下选择一部名为“3 Idiots”的电影:
选择* 从 ( 选择电影 来自电影 ) AS 电影列表 哪里的电影 = '3 白痴';
在此查询中,内部查询从电影表中选择电影列,然后将结果别名为“movie_list”。外部查询从别名子查询中选择电影标题为“3 Idiots”的所有列。