2016-04-01 88 views
0

試圖找到一行,根據找到的值顯示'YES'或'NO'(如果樹已在參數中給出的日期之前處理過,請說YES否)。SQL - SELECT with inner IF or CASE

這裏是我的功能:

CREATE OR REPLACE FUNCTION tree_care(care_date DATE) 
RETURNS TABLE(name VARCHAR(32), type VARCHAR(32), treated TEXT) AS 
$$ 
BEGIN 
RETURN QUERY 
SELECT tree.name, 
     tree.type, 
     IF EXISTS (SELECT * FROM treatment 
        JOIN tree ON tree.name = treatment.tree_name 
        WHERE treatment.date < care_date) THEN 
      'YES'::text 
     ELSE 
      'NO'::text 
     END IF 
FROM tree; 
END; 
$$ 

而且我得到以下錯誤:

ERROR: syntax error at or near "EXISTS" 
LINE 8:   IF EXISTS (SELECT * FROM treatment 

怎樣才能實現一個SELECT內的IF語句?

PS:使用PostgreSQL 9.4

+0

我認爲在END IF之後需要一個分號才能關閉IF EXISTS條件邏輯。 – Dresden

回答

0

IF是控制流程。使用CASE因爲這是一個SELECT語句中:

SELECT tree.name, 
     tree.type, 
     (CASE WHEN EXISTS (SELECT 1 
          FROM treatment 
          WHERE tree.name = treatment.tree_name AND 
           treatment.date < care_date 
         ) THEN 
      THEN 'YES'::text 
      ELSE 'NO'::text 
     END) as Flag 
FROM tree; 

我也猜你打算相關子查詢,而不是一個獨立的子查詢。

+0

謝謝你完美的工作(在WHERE語句中用AND代替THEN,在課程結束時刪除雙THEN)。每天學習!這就是我堅持IFs的原因:) –