2016-04-01 17 views
0

見つかった値に応じて 'YES'または 'NO'を表示しようとしました(引数で指定された日付より前にツリーが処理されている場合はYES、そうでない場合はNO)。ここで内部IFまたはケースを持つSQL - SELECT

は私の機能です:

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

IF EXISTSの条件付きロジックを閉じるには、END IFの後ろにセミコロンが必要だと思います。 – Dresden

答えて

0

IF使用は、制御フローです。これはSELECT文の中にあるので、CASEを使用します。

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ステートメントでTHENの代わりにANDを使用し、コースの最後にTHENを2つ取り除くことで)完全に機能しました。毎日の学習!それは私がIFに固執するために得るものです:) –

関連する問題