我有一个查询,当我在选择列表中有主键时,返回两个不同的结果,当主键不存在时,返回另一个结果。
下面是带有主键'FDReciptNo‘的查询。
使用主键,结果是(3478)记录,在两个内部select语句中的select语句中没有主键,我有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发布于 2013-10-08 21:42:43
UNION还执行一个DISTINCT,所以如果没有PK,其余的列都会多次出现,那么这些列就会减少到一个。
试试UNION ALL,这并不意味着DISTINCT。
发布于 2013-10-08 21:54:08
作为geomagas pointed out,UNION有一个隐式的不同,但是由于涉及相同的表和字段,所以您只需要使用OR。这还允许您删除内联视图。
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'
)https://stackoverflow.com/questions/19258945
复制相似问题