SQL 服务器:使用不明确的名称列加入

SQL Server: Join with ambiguous name columns

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

[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

但是如果我删除评论以完成连接,我会收到此错误:

消息 209,级别 16,状态 1,第 3 行 不明确的列名称 'CaseID'。

使用别名。您收到的错误是由于联接中的两个 table 都有一个 CaseID 列。 SQL 服务器告诉您它无法确定 您正在尝试哪个 select。

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;

您显然曾经 select 编辑 Order table 中的 Gender 列,但是使用GROUP BY.

您在取消注释 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