SQL:使用嵌套查询加入

时间:2012-07-23 20:57:47

标签: sql join

我正在尝试执行此连接操作。因为我是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

1 个答案:

答案 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,这会在两个表中返回符合条件的行,或者您将让一个表成为驱动程序并执行LEFTRIGHT OUTER JOIN驱动表中的所有行是否与另一个表中的匹配。 FULL OUTER JOIN将返回两个表中的所有行,无论它们是否匹配。