【问题标题】:Trouble Aliasing tables when using subqueries and INNER JOIN使用子查询和 INNER JOIN 时出现表别名问题
【发布时间】:2021-11-29 08:54:22
【问题描述】:

你好!我有两个表:tripsstations,我正在尝试打印不同车站的 ID 和名称以及从该车站出发的总次数。

ID 和名称来自 stations 表,而行程次数来自 trips 表,所以我继续创建了一个查询:

  1. 选择 id、name 和 num_rides
  2. FROM (SELECT COUNT (*) num_rides FROM tableB AS b) AS num_rides
  3. INNER JOIN tableA 作为一个 ON a.station_id = b.start_station_id

问题出在外部查询的 JOIN 语句中,它似乎无法识别我的表的“b”别名,我在 内部查询。 我尝试单独运行查询,它们都工作正常。那么我假设问题是计算机不记得我在外部查询中的内部查询别名,但这没有多大意义,不是吗?

错误状态:“无法识别的名称:trips”--->trips 是我用于表 B 的别名。

SELECT 
   station_id,
   name,
   num_of_rides AS num_of_rides_starting_at
FROM
   (
       SELECT
           start_station_id,
           COUNT(*) number_of_rides
       FROM
           bigquery-public-data.new_york_citibike.citibike_trips AS trips
       GROUP BY
           trips.start_station_id
   )
   AS num_of_rides
INNER JOIN
bigquery-public-data.new_york_citibike.citibike_stations AS stations ON stations.station_id = trips.start_station_id
ORDER BY num_of_rides DESC ```

【问题讨论】:

  • 没有理由'识别我的表的“b”别名,我在内部查询中使用了别名'。你期待它的理由是什么(参考权威文件)? minimal reproducible example

标签: sql subquery inner-join alias


【解决方案1】:

我认为问题在于“trips”别名仅在括号内有效。尝试命名整个 select 语句并引用该名称。

SELECT 
   station_id,
   name,
   num_of_rides AS num_of_rides_starting_at
FROM
   (
       SELECT
           start_station_id,
           COUNT(*) number_of_rides
       FROM
           bigquery-public-data.new_york_citibike.citibike_trips AS trips
       GROUP BY
           trips.start_station_id
   ) NeedNameHere
   AS num_of_rides
INNER JOIN
bigquery-public-data.new_york_citibike.citibike_stations AS stations 
   ON stations.station_id = NeedNameHere.start_station_id
ORDER BY num_of_rides DESC 

【讨论】:

  • 名称不包含在子查询中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多