gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:37:33 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com