SQL 中 AS 语句的行为 [已关闭]

问题描述 投票:0回答:2

在研究

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';

然后就可以正常工作了。谁能帮我理解这个概念吗?

sql database postgresql database-administration
2个回答
1
投票

原因是

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';

0
投票

使用 SQL 时,AS 关键字通常用于为列或表添加别名,但不为单个记录添加别名。在您的查询中,您似乎正在尝试使用 AS 为电影标题添加别名,这不是该关键字的有效使用。以下是您如何在不使用 AS 的情况下选择一部名为“3 Idiots”的电影:

选择* 从 ( 选择电影 来自电影 ) AS 电影列表 哪里的电影 = '3 白痴';

在此查询中,内部查询从电影表中选择电影列,然后将结果别名为“movie_list”。外部查询从别名子查询中选择电影标题为“3 Idiots”的所有列。

© www.soinside.com 2019 - 2024. All rights reserved.