以下查询生成不同的计数。在我看来,它们是相同的。使用COALESCE和OR的SQL Server结果有所不同
SELECT
COUNT(*)
FROM
item1
RIGHT JOIN
(Item2
INNER JOIN
item_master ON Item2.Number = item_master.number) AND (item1.itemId = Item2.itemId)
WHERE
COALESCE([Item2].[Amount], item1.Amount, [item_master].[amount], 0) > 0
SELECT
COUNT(*)
FROM
item1
RIGHT JOIN
(Item2
INNER JOIN
item_master ON Item2.Number = item_master.number) AND (item1.itemId = Item2.itemId)
WHERE
(Item2.Amount is not NULL and Item2.Amount > 0) OR
(item1.Amount is not NULL and item1.Amount > 0) OR
(item_master.amount is not NULL and item_master.amount > 0)
额外的','在COALESCE' 0'参数是不必要的和-IN我意见混淆。 – GolezTrol
但是不是NULL> 0的问题? – phpdev76
这会导致错误,就像'0> 0'一样。 :)你也不需要在第二个查询中使用'Item2.Amount不是NULL'和类似的检查。 – GolezTrol