2017-07-08 105 views
0

我有這個問題,如果copy_on_write.id沒有記錄,那麼UPDATE listings SET images = (SELECT images FROM new_vals)運行並消除listings.images什麼也沒有。CASE,什麼時候,然後在更新

所以,我試圖使用一個條件來只運行UPDATE listings如果copy_on_write.images存在。

現在我得到:

psql:queries/copy-to-source.sh:20: ERROR: syntax error at or near "CASE" 
LINE 10:  CASE WHEN images <> 

WITH 
    new_vals AS (
    SELECT * 
    FROM copy_on_write 
    WHERE copy_on_write.posted_by = 102550922::text 
     AND copy_on_write.id = 4 
), 

    updates AS (
    SELECT images FROM new_vals, 
     CASE WHEN images <> '' 
     THEN UPDATE listings SET images = (SELECT images FROM new_vals) 
     END 
) 
SELECT internal_id FROM new_vals 

回答

4

您可以使用updates CTE這樣的:

... 
updates AS (
    UPDATE listings SET 
    images = new_vals.images 
    FROM new_vals 
    WHERE new_vals.images <> '' 
) 
.... 

注意,即:

  • 您的new_vals CTE應該總是返回最多一條記錄,否則這將無法正確工作。

  • 此外,這並不更新listings表,如果new_vals返回圖像列,但它是空字符串(或空)。如果在這種情況下,無論如何您都需要運行更新,然後根本刪除WHERE new_vals.images <> ''

  • 此外,此聲明將更新所有listings.images記錄。你真的想要這個嗎?

相關問題