微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有子查询的完全外部联接

如何解决带有子查询的完全外部联接

我有一个正在简化的查询查询的原始结构如下所示:

SELECT one.*,two.*
FROM 
(
    SELECT *
    FROM dbo.TableA1 as A1 INNER JOIN dbo.TableB1 as B1 ON A1.ID = B1.ID
) as one
FULL OUTER JOIN
(
    SELECT *
    FROM dbo.TableA2 as A2 INNER JOIN dbo.TableB2 as B2 ON A2.ID = B2.ID
) as two
ON one.ID = two.ID and one.AnotherID = two.AnotherID

优化版本(根据查询执行计划)将是:

SELECT A1.*,A2.*
FROM 
    dbo.TableA1 as A1 INNER JOIN dbo.TableB1 as B1 ON A1.ID = B1.ID
FULL OUTER JOIN
    dbo.TableA2 as A2 INNER JOIN dbo.TableB2 as B2 ON A2.ID = B2.ID
ON A1.ID = A2.ID and A1.AnotherID = A2.AnotherID

我的问题是:

由于两个子查询都是基本的选择类型查询,是否可以像我上面所做的那样重写查询

解决方法

等效的查询如下所示:

SELECT . . .   -- select the columns you want
FROM  (dbo.TableA1 A1 INNER JOIN
       dbo.TableB1 B1
       ON A1.ID = B1.ID
      ) FULL OUTER JOIN
      (dbo.TableA2 A2 INNER JOIN
       dbo.TableB2 B2
       ON A2.ID = B2.ID
      )
      ON A1.ID = A2.ID AND
         ?1.AnotherID = ?2.AnotherID

? 是因为我不知道 AnotherID 是在“A”还是“B”表中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。