当我使用max而不是count时,为什么我变为null

时间:2013-04-27 06:24:12

标签: sql sql-server

我回答了以下问题question link。但我认为严格的行为。 当我写这个

Update product  Set  [order]= Case  when Not Exists (Select * from
 product a where  a.ProductTypeID =product.ProductTypeID  and a.id
 <product.ID )
     tHEN 1
     eLSE 
     ((Select cOUNT([ORDER])+1 from product  b where 
     b.ProductTypeID =product.ProductTypeID  and product.ID <product.id)+1)
    eND

它运作良好但我写的时候......'

Update product  Set  [order]= Case  when Not Exists (Select * from
     product a where  a.ProductTypeID =product.ProductTypeID  and a.id
     <product.ID )
         tHEN 1
         eLSE 
         ((Select Max([ORDER])+1 from product  b where 
         b.ProductTypeID =product.ProductTypeID  and product.ID <product.id)+1)
        eND

它在其他情况下给出null我不明白为什么?任何人都可以解释这个当我错过了为什么当我使用Max.Here时它变为null这是sql fiddle http://sqlfiddle.com/#!3/1e15d/1其中我使用count当我使用Max它给出null为什么呢?

2 个答案:

答案 0 :(得分:1)

不同之处在于count为空结果返回零,但max为空结果返回null。

您在子查询中的条件为product.ID <product.id,因为您将字段与自身进行比较时始终为false。这将使子查询的结果为空。

应该{​​{1}}将子查询中的表中的值与外部查询中的表中的值进行比较。

因此,两个查询都不能按预期工作,但是当您使用b.ID <product.id时,您不会从空结果中获取空值。

答案 1 :(得分:0)

你可以尝试这个(对于mysql):

select ifnull(max(column), 0)   when max() return null, it give you 0.