相关名称,如何使用它们?

时间:2014-11-18 10:55:22

标签: sql sql-server join

问题

我正在尝试向查询添加第二个联接但是当我添加secone行

INNER JOIN dbo.Assets ON Assets.AssetTypeID = AssetTypes.AssetTypeID  

SQL Server抛出此错误

Msg 1013, Level 16, State 1, Line 1
The objects "dbo.Assets" and "dbo.Assets" in the FROM clause have the same exposed names. Use correlation names to distinguish them.

查询

SELECT DENumber, AcquiredDate, ItemDescription, ItemName, LocationName, AssetTypeID
FROM dbo.Assets 
INNER JOIN dbo.Locations ON Assets.LocationId = Locations.LocationId 
INNER JOIN dbo.Assets ON Assets.AssetTypeID = AssetTypes.AssetTypeID     
WHERE DATEDIFF(YEAR, AcquiredDate, GetDate()) >= 7

问题

如何编辑查询以允许两个JOINS工作?可能使用相关名称?

3 个答案:

答案 0 :(得分:0)

尝试:

SELECT a1.DENumber, a1.AcquiredDate, a1.ItemDescription, a1.ItemName, a1.LocationName, a1.AssetTypeID
FROM dbo.Assets a1
INNER JOIN dbo.Locations ON a1.LocationId = Locations.LocationId 
INNER JOIN dbo.Assets a2 ON a2.AssetTypeID = a1.AssetTypeID     
WHERE DATEDIFF(YEAR, a1.AcquiredDate, GetDate()) >= 7

答案 1 :(得分:0)

INNER JOIN dbo.Assets ON Assets.AssetTypeID = AssetTypes.AssetTypeID     

这里有一些问题,assettypes也是一个表?那你为什么不加入你的查询。

始终提供别名并尝试排序以理解为

SELECT Distinct --to remove un-wanted duplicate rows
--I don't know, so you will add alias before each column to avoid error.
DENumber, A.AcquiredDate, ItemDescription, ItemName, LocationName, AssetTypeID 

FROM dbo.Assets A
INNER JOIN dbo.Locations L ON A.LocationId = L.LocationId 
INNER JOIN dbo.Assets A1 ON A.AssetTypeID = A1.AssetTypeID
--INNER JOIN dbo.AssetsTypes AT ON A.AssetTypeID = AT.AssetTypeID      --if assettypes you want to join
WHERE DATEDIFF(YEAR, A.AcquiredDate, GetDate()) >= 7

答案 2 :(得分:0)

当您在FROM子句中至少引用两次表并且未指定任何一个表的别名时,会发生此错误,以便SQL Server可以区分这两个。

在您的查询中,您在Assets子句中添加了FROM表,而且Assets中没有任何别名,Inner Join表没有任何别名,请尝试改进您的查询,

SELECT DENumber, AcquiredDate, ItemDescription, ItemName, LocationName, AssetTypeID
FROM dbo.Assets ATS
INNER JOIN dbo.Locations LOC ON ATS.LocationId = LOC.LocationId 
INNER JOIN dbo.Assets ATS1 ON ATS.AssetTypeID = ATS1.AssetTypeID     
WHERE DATEDIFF(YEAR, AcquiredDate, GetDate()) >= 7 

有关您要参考的错误的更多信息,请参阅http://www.sql-server-helper.com/error-messages/msg-1013.aspx