sql - 如何在不包含别名的情况下引用具有相同名称的字段

标签 sql postgresql

我有一个比这更大的查询:

SELECT  ap.car_id, rs.car_id, ..... ap.*, rs.*
FROM    avl_pool  ap
JOIN    route_sources rs
 ON     ap.avl_id = rs.avl_id_begin

enter image description here

如您所见,我得到了两个名为 car_id 的列,它们的值相同并且没有问题。不明白为什么这里不给我模棱两可的错误。

我可以做到并且工作正常:

SELECT *
FROM (
      SELECT  ap.car_id, rs.car_id
      FROM    avl_pool  ap
      JOIN    route_sources rs
        ON     ap.avl_id = rs.avl_id_begin
     ) T

但这给我模棱两可的 car_id

SELECT car_id
FROM (
     SELECT  ap.car_id, rs.car_id
     FROM    avl_pool  ap
     JOIN    route_sources rs
      ON     ap.avl_id = rs.avl_id_begin
     ) T

当然,我可以在每个字段中包含别名,但正如我所说,有很多列。那么我可以在不包含别名的情况下引用该列吗?它们具有相同的值(value),所以并不关心使用哪一个。

最佳答案

原因是查询的 select 部分中的列名不需要是唯一的,而是对列的任何引用(例如,在表达式或另一个(子)查询中)不能有歧义。

所以下面的语句是可以的:

select id, somecolumn as id from test
--> OK.

但是,以下查询将不起作用,因为对名为 id 的列的引用不能明确绑定(bind)到子查询的第一列或第二列:

select id from (select id, somecolumn as id from test) t2

--> "42702: column reference "id" is ambiguous"

请注意 select *... 将起作用,因为这样列就不会被(可能不明确的)名称引用:

select * from (select id, somecolumn as id from test) t2
--> OK.

关于sql - 如何在不包含别名的情况下引用具有相同名称的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116669/

相关文章:

php - 将 LIKE 与多个 WHERE 子句结合使用

mysql - 将多个表中的相同结果集合并到单个结果集中

ruby-on-rails - PostgreSQL:查询所有连接记录属性匹配 where 子句的记录

sql - 从另一个表更新一个表

ruby-on-rails - 为什么 PostgreSQL 查询在服务器启动后的第一个请求中比在后续请求中慢?

PostgreSQL 更新 - 带有左连接问题的查询

sql - 从不同的表中选择列,而不创建不同行的组合?

SQL 按列索引更新

javascript - 在 Windows 上使用 gpg 连接到 postgresql 数据库时出错

sql - 如何在 sql 中高效地更新连接表(从我的 ruby​​ 代码来看它是高效的!!)