我有2個sqlite的表,可以給他們打電話main和sub。
Main 有一個欄位,它應該是子表中具有相同代碼的所有值的總和。
所以如果Main有
CODE | TOTAL_UNITS_AVAILABLE
1 3
2 5
那么這意味著sub有這樣的東西
INGREDIENT_CODE | UNITS_AVAILABLE
1 1
1 2
2 5
我在subfor 上觸發INSERT,UPDATE并使用插入/更新/洗掉的代碼更新記錄DELETE的TOTAL_UNITS_AVAILABLEin值Mainsub
Insert并且update作業正常,但DELETE有一個問題,如果每個sub包含 X 主代碼的記錄都被洗掉,則 main 中的金額總和將更新為NULL.
我嘗試了以下方法來防止它,但它不起作用:
CREATE TRIGGER UpdateAmountAvailable_UPDATE
AFTER DELETE ON Sub
BEGIN
UPDATE Main
SET
TOTAL_UNITS_AVAILABLE = (
SELECT
CASE SUM(A.UNITS_AVAILABLE)
WHEN NULL THEN 0
WHEN 0 THEN 0
ELSE SUM(A.UNITS_AVAILABLE)
END
FROM Sub AS A
WHERE A.INGREDIENT_CODE = old.INGREDIENT_CODE
) WHERE CODE = old.INGREDIENT_CODE;
END
有什么我可以嘗試的解決方法嗎?
uj5u.com熱心網友回復:
Sqlite 有一個非標準的聚合函式TOTAL
sum() 和 total() 聚合函式回傳組中所有非 NULL 值的總和。如果沒有非 NULL 輸入行,則 sum() 回傳 NULL 但 total() 回傳 0.0。
CREATE TRIGGER UpdateAmountAvailable_DELETE
AFTER DELETE ON Sub
BEGIN
UPDATE Main
SET TOTAL_UNITS_AVAILABLE = (
SELECT TOTAL(A.UNITS_AVAILABLE)
FROM Sub AS A
WHERE A.INGREDIENT_CODE = old.INGREDIENT_CODE
)
WHERE CODE = old.INGREDIENT_CODE;
END
使用標準 SUM 函式也是如此 COALESCE(SUM(A.UNITS_AVAILABLE), 0)
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325066.html
