我的查询比这更大:
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
正如您所看到的,我得到两个名为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
当然我可以在每个字段中包含别名,但正如我所说,有很多列。那么我可以在不包含别名的情况下引用该列吗?它们具有相同的价值,因此不关心使用哪一个。
答案 0 :(得分:2)
原因是select
中的列名称 - 查询的一部分不需要是唯一的,但是对列的任何引用(例如在表达式或另一个(子)查询中)都不能是不明确的。
所以以下陈述是可以的:
select id, somecolumn as id from test
--> OK.
但是,以下查询将不起作用,因为对名为id
的列的引用无法明确地绑定到子查询的第一列或第二列:
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.