我正在尝试执行此连接操作.因为我是sql的新手,我发现了解语法和东西的问题.
您认为以下查询有什么问题:
select top 1 *
from
(select *
from dbo.transaction_unrated
where transaction_date >= '2012/05/01'
and transaction_date < '2012/06/01'
and content_provider_code_id in (1)
) FULL OUTER JOIN
(select *
from dbo.transaction_rated
where transaction_date >= '2012/05/01'
and transaction_date < '2012/06/01'
and entity_id in (1)
and mapping_entity_id = 1)
)
ON dbo.transaction_unrated.cst_id = dbo.transaction_rated.unrated_transaction_id
Run Code Online (Sandbox Code Playgroud)
您需要为派生表设置别名.
select top 1 *
from
(
select *
from dbo.transaction_unrated
where transaction_date >= '2012/05/01'
and transaction_date < '2012/06/01'
and content_provider_code_id in (1)
) rsQuery1
FULL OUTER JOIN
(
select *
from dbo.transaction_rated
where transaction_date >= '2012/05/01'
and transaction_date < '2012/06/01'
and entity_id in (1)
and mapping_entity_id = 1)
) rsQuery2 ON rsQuery1.cst_id = rsQuery2.unrated_transaction_id
Run Code Online (Sandbox Code Playgroud)
FULL OUTER JOIN也很不寻常(根据我的经验).你确定那是你想要的吗?通常情况下,您将执行一个INNER JOIN带回两个表中符合条件的行,或者您将让一个表成为驱动程序并执行一个LEFT或RIGHT OUTER JOIN哪个将带回驱动表中的所有行,无论是否匹配另一张桌子.A FULL OUTER JOIN将返回两个表中的所有行,无论它们是否匹配.