首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -带有内部IF或CASE的选择

SQL -带有内部IF或CASE的选择
EN

Stack Overflow用户
提问于 2016-04-01 23:26:39
回答 1查看 65关注 0票数 0

试图让一行显示“是”或“否”,这取决于找到的值(如果树在参数给定的日期之前已被处理,则请说“是”或“否”)。

这是我的功能:

代码语言:javascript
复制
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;
$$

我得到了以下错误:

代码语言:javascript
复制
ERROR:  syntax error at or near "EXISTS"
LINE 8:            IF EXISTS (SELECT * FROM treatment

如何在SELECT中实现IF语句?

PS:使用postgresql 9.4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-01 23:47:53

IF是控制流。使用CASE,因为这是在SELECT语句中:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36367364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档