1
我不知道這是可能的,但我想要做的事情的本質是有兩個單獨的SELECTS
,一個用於單個結果,一個爲兩個結果的聯合。注意:{括號}中的文字只是一個通用的替換。下面讓我在CASE
語法錯誤:如何在FROM之前使用CASE語句SELECT之前在更新查詢
UPDATE MySchema.MyTable as MyTable
SET {column_names} = {new values}
FROM
CASE
WHEN {case A} THEN
(SELECT {column_names}
FROM MySchema.MyOtherTable
WHERE {conditions}
LIMIT 1)
ELSE
((SELECT {column_names}
FROM MySchema.MyOtherTable
WHERE {conditions}
LIMIT 1)
UNION
(SELECT {column_names}
FROM MySchema.MyOtherTable
WHERE {other_conditions}
LIMIT 1))
END CASE;
AS MyOtherTable
WHERE MyTable.product_id = MyOtherTable.product_id
我有這個查詢與UPDATE
工作 - SET
- 內每個兩種情況重複FROM
部分,但我試圖削減了冗餘的查詢如果可能的話。我也嘗試在每種情況下移動FROM
,但這也給語法錯誤。
類似的是,我會考慮的東西。這是在一個觸發器函數內,而情況A是當'OLD'中的值爲NULL時,或者'NEW'和'OLD'中的值相同時。因爲更新正在修復單個行或同一行加上另一行。我擔心從簡單包含聯合選擇開始會有太多的開銷,但我沒有考慮到'NOT {case A}'邏輯。謝謝! –