在子查询中添加两列不提供正确的结果集

时间:2015-05-12 11:17:13

标签: sql postgresql

SELECT a, b
FROM dcl 
WHERE a='123'
AND b> (
  SELECT SUM(a) 
         + 
         (SELECT SUM(a) 
          FROM d
          WHERE a= 1506453)
  FROM aslp  
  WHERE a.a= '0527416666') 

我得到的输出

a=123
b= 23

根据我在子查询中写的条件,我不应该得到上述记录。

2 个答案:

答案 0 :(得分:1)

让我在这里做一个疯狂的猜测:其中一列

eCPClaim_total_claim_charge
eCPServiceLinePayment_Payment_Amount
ecpservicelinepaymentcobadjustment_amount 

使用数据类型 float real 定义,这意味着您要比较不精确的浮点数。这可以解释为什么60.06 > 51.05 + 9.01可以评估为假,如果数字是精确的,它当然不应该。

补救措施也可能是将数据类型更改为精确的数字类型,或者将值强制转换为精确类型以进行比较。

示例SQL Fiddle演示了问题和可能的解决方法。

答案 1 :(得分:0)

如果我可以的话,那将是一个评论:) 关于第一列(ecpclaim_key),您不能只有该值或没有结果,因为where明确要求:

  

WHERE ecpclaim_key =' 1437190299'

对于第二栏的内容,如果没有对表及其记录的完整视图,就不可能说它是否正确;在任何情况下,如果我被迫我会打赌我的2美分在SQL框上是正确的:) 如果你能给我们提供的结果将是很好的:

SELECT SUM(ecpservicelinepaymentcobadjustment_amount) 
FROM tbl_ecpservicelinepaymentcobadjustment 
WHERE ecpservicelinepaymentcob_key = 1506453

SELECT SUM(eCPServiceLinePayment_Payment_Amount)
FROM tbl_eCPServiceLinePayment slp
WHERE slp.eCPRemit_Key = '0527416666'