我有一个比这更大的查询:
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
当然,我可以在每个字段中包含别名,但正如我所说,有很多列。那么我可以在不包含别名的情况下引用该列吗?它们具有相同的值(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/