Не удалось связать идентификатор нескольких частей внутреннего соединения SQL - PullRequest
0 голосов
/ 25 октября 2019

У меня есть хранимая процедура с кучей объединений. Я не могу понять, почему это не работает - я получаю сообщение об ошибке:

Идентификатор из нескольких частей "[table.column]"не может быть привязан.

Это измененный бит SQL, оригинал -

    dbo.Release 
INNER JOIN 
    dbo.Cartridge 
INNER JOIN 
    dbo.PriceClass AS PriceClass ON dbo.Cartridge.PriceClassId = PriceClass.Id 
INNER JOIN 
    dbo.CartridgeType ON dbo.Cartridge.CartridgeTypeId = dbo.CartridgeType.Id 
    ON dbo.Release.Id = dbo.Cartridge.ReleaseId 
INNER JOIN 
    dbo.OemSegmentation 
INNER JOIN 
    dbo.OemProduct ON dbo.OemSegmentation.OemProductId = dbo.OemProduct.Id 
INNER JOIN 
    dbo.OemPlatform ON dbo.OemSegmentation.OemPlatformId = dbo.OemPlatform.Id 
INNER JOIN 
    dbo.OemMediaType ON dbo.OemSegmentation.OemMediaTypeId = dbo.OemMediaType.Id 
    ON dbo.CartridgeType.Id = dbo.OemSegmentation.SupplCartTypeId  
       OR dbo.CartridgeType.Id = dbo.OemSegmentation.CartridgeTypeId 
LEFT OUTER JOIN 
    dbo.CartridgeCoverage ON dbo.Cartridge.Id = dbo.CartridgeCoverage.CartridgeId

То, что я пытаюсь изменить на -

    dbo.Release 
INNER JOIN 
    dbo.Cartridge 
INNER JOIN 
    dbo.PriceClass AS PriceClass ON dbo.Cartridge.PriceClassId = PriceClass.Id 
INNER JOIN 
    dbo.CartridgeType ON dbo.Cartridge.CartridgeTypeId = dbo.CartridgeType.Id 
    ON dbo.Release.Id = dbo.Cartridge.ReleaseId             
INNER JOIN 
    dbo.OemProduct ON OemSegmentation.OemProductId = dbo.OemProduct.Id 
INNER JOIN 
    dbo.OemPlatform ON dbo.OemSegmentation.OemPlatformId = dbo.OemPlatform.Id 
INNER JOIN 
    dbo.OemMediaType ON dbo.OemSegmentation.OemMediaTypeId = dbo.OemMediaType.Id        
LEFT OUTER JOIN 
    dbo.CartridgeCoverage ON dbo.Cartridge.Id = dbo.CartridgeCoverage.CartridgeId

Ошибка происходит в этих строках

INNER JOIN 
     dbo.OemProduct ON OemSegmentation.OemProductId = dbo.OemProduct.Id 
INNER JOIN 
     dbo.OemPlatform ON dbo.OemSegmentation.OemPlatformId = dbo.OemPlatform.Id 
INNER JOIN 
     dbo.OemMediaType ON dbo.OemSegmentation.OemMediaTypeId = dbo.OemMediaType.Id

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Кажется, вы пропустили присоединение: "INNER JOIN dbo.OemSegmentation"

enter image description here

0 голосов
/ 25 октября 2019

После того, как вы создали псевдоним для своей таблицы, используйте псевдоним, чтобы использовать имена ДВА ЧАСТИ для столбцов. то есть [TableAlias].[ColumnName]

Я полагаю, что вы обычно используете column namd Id во всех ваших таблицах, поэтому, когда вы выбираете столбец Id, просто переходите на [TableName].Id.

...