SQL Server:使用不明确的名称列加入

时间:2018-01-09 13:45:29

标签: sql-server join ambiguous

我在SQL Server中有两个表(我删除了很多行,但它不应该影响结果):

[DBO] [订购]:

CaseId    Gender
-----------------
698       Female
694       Male
676       Female
659       Male

[DBO] [Plimplan]:

OrderID     CaseID            InfoID              
--------------------------------------------
33425999      698             BBBBBE           
33425984      694             AAAAAS           
33425984      694             DSSSAS             
33425609      694             BBBBBA           
33425270      676             AAAAAA           
33424973      676             AAAAAD           
33424716      676             SASSAS           
33424704      676             AAAAAA           
33424500      676             BBBBBE           
33424340      659             AAAAAA           
33424281      659             BBBBBD           

我希望获得以下内容:

[DBO] [Plimplan]:

OrderID     CaseID            InfoID          Gender      
----------------------------------------------------
33425984      694             AAAAAS           Male
33425270      676             AAAAAA           Female
33424340      659             AAAAAA           Male

让我们忘记加入。我可以从[dbo]中删除不需要的行。[Order]用这个:

 SELECT TOP (100) MAX (OrderID) AS [OrderID]
  ,MAX (CaseID) AS [CaseID]
  ,MAX (InfoID) AS [InfoID] 
  /*,[Gender]*/

  FROM [dbo].[Plimplan] as Plimpl
  /* INNER JOIN [dbo].[Order] as Ord
  ON Plimpl.CaseID = Ord.CaseID */

  WHERE [InfoID] NOT LIKE 'BBBBB%'
  and CaseID < 700
  and CaseID > 600
  GROUP BY (CaseID)
  order by CaseID desc

但如果删除评论以完成加入,我会收到此错误:

Msg 209,Level 16,State 1,Line 3 不明确的列名称&#39; CaseID&#39;。

2 个答案:

答案 0 :(得分:3)

使用别名。您获得的错误是由于联接中的两个表都有CaseID列。 SQL Server告诉您,它无法找出您想要选择的

SELECT TOP 100
    MAX (Plimpl.OrderID) AS [OrderID]
    MAX (Plimpl.CaseID)  AS [CaseID]
    MAX (Plimpl.InfoID)  AS [InfoID] 
FROM [dbo].[Plimplan] AS Plimpl
INNER JOIN [dbo].[Order] AS Ord
     ON Plimpl.CaseID = Ord.CaseID
WHERE
    Plimpl.[InfoID] NOT LIKE 'BBBBB%' AND
    Plimpl.CaseID < 700 AND
    Plimpl.CaseID > 600
GROUP BY
    Plimpl.CaseID
ORDER BY
    Plimpl.CaseID DESC;

您曾在Gender表格中选择了Order列,但您在使用GROUP BY时这样做是没有意义的。

答案 1 :(得分:2)

当您取消注释JOIN语句时,您收到错误了吗?

使用别名

 SELECT TOP (100) MAX (OrderID) AS [OrderID]
  ,MAX (CaseID) AS [CaseID]
  ,MAX (InfoID) AS [InfoID] 
  /*,[Gender]*/

  FROM [dbo].[Plimplan] as Plimpl
   INNER JOIN [dbo].[Order] as Ord
  ON Plimpl.CaseID = Ord.CaseID 

  WHERE [InfoID] NOT LIKE 'BBBBB%'
  and Plimpl.CaseID < 700
  and Plimpl.CaseID > 600
  GROUP BY Plimpl.CaseID
  order by Plimpl.CaseID desc