首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >select语句中主键列和不主键列的不同结果。为什么?

select语句中主键列和不主键列的不同结果。为什么?
EN

Stack Overflow用户
提问于 2013-10-08 21:38:26
回答 2查看 263关注 0票数 1

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

下面是带有主键'FDReciptNo‘的查询。

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

想知道为什么会有这样的区别吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-08 21:42:43

UNION还执行一个DISTINCT,所以如果没有PK,其余的列都会多次出现,那么这些列就会减少到一个。

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

票数 11
EN

Stack Overflow用户

发布于 2013-10-08 21:54:08

作为geomagas pointed out,UNION有一个隐式的不同,但是由于涉及相同的表和字段,所以您只需要使用OR。这还允许您删除内联视图。

代码语言:javascript
复制
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'
        )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19258945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档