ошибка с SQL-запросом из-за неоднозначного имени столбца - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь создать SQL-запрос, но есть эта ошибка:

Неоднозначное имя столбца 'описание'.

Это потому, что этот столбец встречается вобе таблицы.

, если я удалю описание из запроса, оно будет работать. Я попытался переименовать поле описания "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 голосов
/ 23 октября 2019

Обе таблицы, вступающие в игру в запросе, имеют столбец с именем description. Ваша СУБД не может угадать, какую таблицу столбцов вы на самом деле хотите.

Вам необходимо добавить префикс имени столбца к имени таблицы (или псевдониму таблицы), чтобы устранить неоднозначность.

Суть в том, что рекомендуется всегда добавлять префиксы имен столбцов к именам таблиц или псевдонимам, как только несколько таблиц вступают в игру в запросе. Это позволяет избежать проблемы, которую вы видите здесь, и упростить понимание запросов для бедных людей, которые не имеют представления о базовой схеме.

Вот обновленная версия вашего запроса с псевдонимами таблиц и префиксами столбцов. Очевидно, вам нужно просмотреть каждый столбец, чтобы ввести правильный псевдоним:

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%'
...