gpt4 book ai didi

sql-server - 解释SQL Server 2008中Ambigously column错误的原因

转载 作者:行者123 更新时间:2023-12-02 18:40:21 26 4
gpt4 key购买 nike

我有一个表Business_Unit:

    business_unit_id    int    area_code           nvarchar(100)    region_code         nvarchar(100)    sub_region_code     nvarchar(100)

It has some values in it.

Query 1:

select 
business_unit_id,*
from
business_unit
order by
business_unit_id desc

当我查询这个时,我收到以下错误。

Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'business_unit_id'.

为了解决这个问题,我使用了表的别名 bu 并在列前面加上别名。

select 
bu.business_unit_id, *
from
business_unit bu
order by
bu.business_unit_id desc

即使下面的查询也有效。

select 
bu.business_unit_id, bu.*
from
business_unit bu
order by
bu.business_unit_id desc

我想知道为什么它在查询“Query 1”时抛出错误[business_unit_id]。这里没有歧义,我只有一张 table 。

你能解释一下吗?

<小时/>

问这个问题的原因。我有一个 120 列的表(假设为 bigtable),现在,我想按 90 列对其进行排序。我无法滚动并检查该值,因此我将 select 90thcolumn,* from bigtable order 按 90thcolumn 放置。

<小时/>

最佳答案

是的,我想我已经找到了这种奇怪行为的一些解释

如果你只做这样的事情

SELECT Column1, * FROM Table_Name  

这应该可以正常工作。

但是当你做类似的事情

SELECT Column1, * FROM Table_Name 
ORDER BY Column1 --<-- this Column1 is contained in `*` as well as in the SELECT
-- statement too, SQL Server needs to know which one to use
-- in your order by clause.

它会抛出一个错误,因为 Column1 在您的 SELECT 查询中被 SELECTED 两次,并且 SQL Server 想知道您想要按 Results 排序的列。

不明确的列位于您的 Order by 子句中,但不在您的 Select 语句中。

进一步说明

为了进一步证明我的观点,下面是 SQL 指令的执行顺序。

  1. FROM clause

  2. WHERE clause

  3. GROUP BY clause

  4. HAVING clause

  5. SELECT clause

  6. ORDER BY clause

如您所见,SELECT 运算符在 ORDER BY 子句之前执行。因此,在您的情况下,SELECT 子句将有两个同名的列,当涉及到 ORDER BY 时,结果 SQL Server 想要知道在 ORDER BY 中使用哪一列,并且它会抛出 Ambigously column 的错误>。

当与别名一起使用时,歧义性得到解决,您不会再遇到任何错误。

关于sql-server - 解释SQL Server 2008中Ambigously column错误的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20838634/

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