如何解决带有子查询的完全外部联接
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 举报,一经查实,本站将立刻删除。