首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正确的外部联接来匹配来自两个不同数据库的记录

使用正确的外部联接来匹配来自两个不同数据库的记录
EN

Stack Overflow用户
提问于 2010-02-02 19:27:36
回答 3查看 1.6K关注 0票数 1

SQL 2005:

我正在尝试创建一个外部连接,它将从两个不同的数据库中提取记录。我的目标是确定数据库B中哪些记录在数据库A中没有匹配的记录。当我尝试运行查询时,它返回了下面的错误。我不知道如何避免这个错误:

‘'Tables或函式'AssetCompType_EquipmentProperty_LinkTable’和AssetCompType_EquipmentProperty_LinkTable具有相同的公开名称。使用相关名称来区分它们。

代码语言:javascript
复制
          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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-02 19:35:33

看来您必须区分这些表。试着:

代码语言:javascript
复制
select * 
from AssetCompType_EquipmentProperty_LinkTable T1
  right outer join 
    [database A].dbo.AssetCompType_EquipmentProperty_LinkTable T2 
       on T1.AssetCompTypeID = T2.AssetCompTypeID
票数 2
EN

Stack Overflow用户

发布于 2010-02-02 19:33:54

只需指定别名:

代码语言:javascript
复制
 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
票数 1
EN

Stack Overflow用户

发布于 2010-02-02 19:34:35

当名称相同的JOINing表(如果不是它们本身)时,您需要使用表别名:

代码语言:javascript
复制
          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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
   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 INNOT EXISTS是等价的-左联接/ is效率较低。有关更多详细信息,请参阅这篇文章

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2186985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档