【问题标题】:SQL Server : inner join: ambiguous nameSQL Server:内部联接:名称不明确
【发布时间】:2018-01-05 11:39:42
【问题描述】:

我在 SQL Server 中有两个表:

[生产].[dbo].[订单详情]:

CaseId    Gender
-----------------
698       Female
694       Male
676       Male
659       Male
636       Female
624       Female
622       Female
597       Male
579       Male
574       Male

[生产].[dbo].[订单]

OrderID   SoftAdminOrderID    InfoIDOrderID   Active      
----------------------------------------------------
33425999      698             196665           1
33425984      694             196662           1
33425984      694             196663           0   
33425609      676             196645           1
33425270      659             196625           1
33424973      636             196609           1
33424716      624             196594           1
33424704      622             196592           1
33424500      597             196568           1
33424340      579             196552           1
33424281      574             196548           1

我想通过内部连接获得性别:

 SELECT TOP (10) 
     [OrderID],
     [SoftAdminOrderID],
     [InfoID],
     [Active],
    /* [Gender]*/
 FROM
     [Production].[dbo].[Order]
 /*INNER JOIN 
     [Production].[dbo].[OrderDetails] ON [Production].[dbo].[Order].SoftAdminOrderID = [Production].[dbo].[OrderDetails].CaseId*/
 where Active = 1
 order by SoftAdminOrderID desc

但是当我从内部连接中删除评论时出现错误:

消息 209,第 16 层,状态 1,第 58 行
不明确的列名称“CaseId”。

我不明白为什么它被认为是模棱两可的。

【问题讨论】:

  • 错误与查询不符。
  • 正如您所展示的,这些表没有共同的列名,您的查询也没有显示这是一个问题。您确定您发布了正确的表结构和查询吗?
  • ^^ 他们说的。您发布的代码 sn-p 不是引发错误的位置。
  • 对不起,我稍微修改了我的真实案例并忘记了一些事情。现在我更正了,添加了 ,[gender]。这个例子应该反映我的真实情况。
  • 你确定这是整个查询吗?此查询不应出现错误消息,因此必须遗漏一些内容

标签: sql sql-server tsql inner-join


【解决方案1】:

如果真的发生了,那么为什么不通过向列添加表别名来解决它,如下所示:

SELECT TOP (10) 
    o.[OrderID]
    ,o.[SoftAdminOrderID]
    ,o.[InfoID]
    ,od.[Gender]
 FROM [Production].[dbo].[Order] AS o
 INNER JOIN [Production].[dbo].[OrderDetails] AS od ON o.SoftAdminOrderID = od.CaseId

【讨论】:

  • 这无关紧要。无论是否使用别名,发布的查询和表设计都不会出现他发布的错误消息
  • 是的,我想OP在这里给出的信息也有一些缺失,但最终的解决方案只是这个。即使错误来源未知,人们仍在投票。
  • 为什么这个问题得到了赞成我也不明白,这是正确的
猜你喜欢
  • 2018-06-17
  • 2018-01-24
  • 1970-01-01
  • 2012-01-28
  • 2017-01-01
  • 2014-07-10
  • 1970-01-01
  • 2016-12-30
  • 2013-07-28
相关资源
最近更新 更多