我正在尝试执行此连接操作。因为我是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
答案 0 :(得分:8)
您需要为派生表设置别名。
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
FULL OUTER JOIN
也很不寻常(根据我的经验)。你确定这是你想要的吗?通常情况下,您会执行INNER JOIN
,这会在两个表中返回符合条件的行,或者您将让一个表成为驱动程序并执行LEFT
或RIGHT OUTER JOIN
驱动表中的所有行是否与另一个表中的匹配。 FULL OUTER JOIN
将返回两个表中的所有行,无论它们是否匹配。