我回答了以下问题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为什么呢?
答案 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.