由于列名不明确,导致SQL查询错误

时间:2019-10-23 09:25:44

标签: sql select ambiguous

我正在尝试创建一个SQL查询,但是出现此错误:

  

列名“ description”不明确。

这是因为此列出现在两个表中。

如果我从查询中删除了描述,它将起作用。 我试图重命名描述字段“ AS description_pointer”,但是仍然出现错误。

SELECT TOP 1000 [activityid]
      ,[activitytypecodename]
      ,[subject]
      ,[regardingobjectid]
      ,[contactid] 
      ,[new_crmid]
      ,[description] AS description_pointer
FROM [crmtestext_MSCRM].[dbo].[FilteredActivityPointer] as I
   Left JOIN  [crmtestext_MSCRM].[dbo].[FilteredContact]
  ON I.[regardingobjectid] = [crmtestext_MSCRM].[dbo].[FilteredContact].[contactid]
  WHERE new_crmid not like '%Null%' AND activitytypecodename like '%E-mail%'

1 个答案:

答案 0 :(得分:0)

在查询中起作用的两个表都有一个名为description的列。您的RDBMS无法猜测您真正想要的列表。

您需要在列名前添加表名(或表别名)以消除歧义。

最重要的是,在查询中使用多个表时,最好始终使用表名或别名为列名加前缀 。这样可以避免您在这里看到的问题,并使那些不了解基础架构的可怜人更容易理解查询。

这是查询的更新版本,其中包含表别名和列前缀。显然,您需要检查每列以放置正确的别名:

SELECT TOP 1000 
       i.[activityid]
      ,i.[activitytypecodename]
      ,i.[subject]
      ,c.[regardingobjectid]
      ,c.[contactid] 
      ,c.[new_crmid]
      ,c.[description] AS description_pointer
FROM [crmtestext_MSCRM].[dbo].[FilteredActivityPointer] as i
   Left JOIN  [crmtestext_MSCRM].[dbo].[FilteredContact] as c
  ON i.[regardingobjectid] = c.[contactid]
  WHERE i.new_crmid not like '%Null%' AND i.activitytypecodename like '%E-mail%'