代码之家  ›  专栏  ›  技术社区  ›  jimangel2001

在大小写表达式中指定子查询的值

  •  -1
  • jimangel2001  · 技术社区  · 2 年前

    我想得到一个值,如果它存在,如果它不存在,我想返回一个随机数(它比这个复杂一点,但这是它的本质)。

    我的问题是这样的:

    SELECT 
        something, 
        CASE
            WHEN EXISTS (SELECT column_1 FROM table_1 WHERE something)  
                THEN column_1
                ELSE RANDOM()
        END;
    

    这显然是无效的。

    我使用Postgresql,我在一个plpgsql函数中。

    我该怎么办?

    0 回复  |  直到 2 年前
        1
  •  0
  •   jimangel2001    2 年前

    我找到了!

    使用 COALESCE 我可以做到:

    SELECT something, CΟALESCE((SELECT column_1 FROM table_1 WHERE something), RANDOM())
    

    当第一个查询没有返回某个内容时,RANDOM将带头执行。

        2
  •  0
  •   a_horse_with_no_name    2 年前

    无法从中引用该列 EXISTS 条件,因为这只会产生真或假。子查询中选定的列也将被完全忽略。

    因此,您需要在THEN部分重复选择以获得列值:

    SELECT 'something' as one_column, 
           CASE
             WHEN EXISTS (SELECT * 
                          FROM table_1 
                          WHERE <some_condition>) 
               THEN (select column_1 from table_1 where <some_condition>)
             ELSE random()
           END as other_column;
    

    注意THEN分支中SELECT周围的括号。它们是将此标记为标量查询所必需的。你还需要确保 some_condition 只返回一行