1

我有一个查询,当我在选择列表中有主键时返回两个不同的结果,当主键不存在时返回另一个结果。

下面给出的是带有主键“FDReciptNo”的查询。

使用主键,结果是(3478)条记录,在两个内部选择语句中的选择语句中没有主键,我有 1274 条记录。

想了解为什么会有这样的差异吗?

SELECT SUM(PrincipleAmount) AS PrincipleAmount FROM
(
    SELECT  
            FDReceiptNo, PrincipleAmount
    FROM mFixedDeposit
    WHERE   CurrentStatus = ' ' AND 
            DepositDate <= '9/20/2013 12:00:00 AM' AND 
            FDReceiptNo NOT IN
            (
                SELECT FDReceiptNo FROM mFixedDeposit 
                WHERE 
                    TransactionDate > '9/20/2013 12:00:00 AM' AND MaturityDate <= '9/20/2013 12:00:00 AM'
            )

    UNION   
    SELECT  
            FDReceiptNo, PrincipleAmount
    FROM mFixedDeposit
    WHERE   TransactionDate > '9/20/2013 12:00:00 AM' AND 
            MaturityDate <= '9/20/2013 12:00:00 AM'

) AS tbl
4

2 回答 2

11

UNION也执行 a DISTINCT,因此如果没有 PK,其余列多次出现,则这些列将减少为一。

尝试UNION ALL,这并不意味着DISTINCT

于 2013-10-08T21:42:43.223 回答
0

正如geomagas 指出的那样,UNION 有一个隐含的 DISTINCT,但由于涉及相同的表和字段,您可以只使用 anOR来代替。这也允许您删除内联视图

SELECT
    SUM(PrincipleAmount) AS PrincipleAmount     
FROM mFixedDeposit
WHERE   (CurrentStatus = ' ' AND 
        DepositDate <= '9/20/2013 12:00:00 AM' AND 
        FDReceiptNo NOT IN
        (
            SELECT FDReceiptNo FROM mFixedDeposit 
            WHERE 
                TransactionDate > '9/20/2013 12:00:00 AM' AND MaturityDate <= '9/20/2013 12:00:00 AM'
        ))
        OR
        (
           TransactionDate > '9/20/2013 12:00:00 AM' AND 
           MaturityDate <= '9/20/2013 12:00:00 AM'
        )
于 2013-10-08T21:54:08.143 回答