SQL 2005:
我正在尝试创建一个外部连接,它将从两个不同的数据库中提取记录。我的目标是确定数据库B中哪些记录在数据库A中没有匹配的记录。当我尝试运行查询时,它返回了下面的错误。我不知道如何避免这个错误:
‘'Tables或函式'AssetCompType_EquipmentProperty_LinkTable’和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发布于 2010-02-02 19:35:33
看来您必须区分这些表。试着:
select *
from AssetCompType_EquipmentProperty_LinkTable T1
right outer join
[database A].dbo.AssetCompType_EquipmentProperty_LinkTable T2
on T1.AssetCompTypeID = T2.AssetCompTypeID发布于 2010-02-02 19:33:54
只需指定别名:
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发布于 2010-02-02 19:34:35
当名称相同的JOINing表(如果不是它们本身)时,您需要使用表别名:
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是等价的-左联接/ is效率较低。有关更多详细信息,请参阅这篇文章。
https://stackoverflow.com/questions/2186985
复制相似问题