SQL 2005:
我正在尝试创建一个外部联接,它将从两个不同的数据库中提取记录。我的目标是确定数据库B中的哪些记录在数据库A中没有匹配的记录。当我尝试运行查询时,它返回了下面的错误。我不知道如何解决这个错误:
'表或函数'AssetCompType_EquipmentProperty_LinkTable'和'TA-Reporting.dbo.AssetCompType_EquipmentProperty_LinkTable'具有相同的公开名称。使用相关名来区分它们。'
select *
from AssetCompType_EquipmentProperty_LinkTable
right outer join [database A].dbo.AssetCompType_EquipmentProperty_LinkTable on
[database A].dbo.AssetCompType_EquipmentProperty_LinkTable.AssetCompTypeID=
[database B].dbo.AssetCompType_EquipmentProperty_LinkTable.AssetCompTypeID
答案 0 :(得分:2)
看来你必须区分表格。试试:
select *
from AssetCompType_EquipmentProperty_LinkTable T1
right outer join
[database A].dbo.AssetCompType_EquipmentProperty_LinkTable T2
on T1.AssetCompTypeID = T2.AssetCompTypeID
答案 1 :(得分:1)
只需指定别名:
select *
from AssetCompType_EquipmentProperty_LinkTable tbl_thisDB
right outer join [database A].dbo.AssetCompType_EquipmentProperty_LinkTable tbl_A on
tbl_A.AssetCompTypeID=
tbl_thisDB.AssetCompTypeID
答案 2 :(得分:1)
在JOIN具有相同名称的表时,您需要使用表别名,如果不是自己:
SELECT a.*, b.*
FROM AssetCompType_EquipmentProperty_LinkTable a
RIGHT OUTER JOIN [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b ON a.AssetCompTypeID = b.AssetCompTypeID
单独使用JOIN语法是必要的,但另外因为您不能使用SELECT *
,因为表格中列相同的可能性也是如此。
那就是说 - 为了得到你想要的结果,你应该考虑:
NOT IN
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
WHERE b.AssetCompTypeID NOT IN (SELECT a.AssetCompTypeID
FROM AssetCompType_EquipmentProperty_LinkTable a)
NOT EXISTS
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
WHERE NOT EXISTS (SELECT NULL
FROM AssetCompType_EquipmentProperty_LinkTable a
WHERE a.AssetCompTypeID = b.AssetCompTypeID)
LEFT JOIN/IS NULL
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
LEFT JOIN AssetCompType_EquipmentProperty_LinkTable a ON a.AssetCompTypeID = b.AssetCompTypeID
WHERE a.AssetCompTypeID IS NULL
在这三个选项中,NOT IN
和NOT EXISTS
是等效的 - LEFT JOIN / IS NULL效率较低。有关详细信息,请参阅this article。