[英]subquery: is it good practise to use having clause to filter out rows of outer query that contains subquery's null values
[英]Update column with subquery, filter out null values
我正在嘗試使用子查詢更新列。 但是它給出了一個錯誤:
無法將PRODUCT.AVERAGE_COST更新為NULL
我不知道當子查詢結果為null
時如何不更新。
UPDATE PRODUCT P SET P.AVERAGE_COST =
(SELECT
SUM(C.COST)/SUM(C.QTY)
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE
GROUP BY C.PRODUCT_CODE )
如果SUM(C.QTY)
為0
或子查詢結果為null
我根本就不想更新。
查詢應在Oracle,MySQL,MSSQL,PostgreSQL上運行。
如果您使用的是MSSQL,請嘗試以下一項:
UPDATE PRODUCT P SET P.AVERAGE_COST =
(SELECT
CASE WHEN ISNULL(SUM(C.QTY),0)='0' THEN '0' ELSE ISNULL(SUM(C.COST),0)/ISNULL(SUM(C.QTY),0) END
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE
GROUP BY C.PRODUCT_CODE )
您應該在查詢中添加WHERE
子句。 所以它應該看起來像:
UPDATE PRODUCT P SET P.AVERAGE_COST =
(SELECT SUM(C.COST)/SUM(C.QTY)
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE)
WHERE
(SELECT COUNT(1)
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE ) > 0
AND
(SELECT SUM(C.QTY)
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE ) <> 0
您可以在SQLFiddle中檢查它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.