Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL错误:JSON集返回函数的情况_Postgresql_Case_Postgresql 10_Lateral Join - Fatal编程技术网

PostgreSQL错误:JSON集返回函数的情况

PostgreSQL错误:JSON集返回函数的情况,postgresql,case,postgresql-10,lateral-join,Postgresql,Case,Postgresql 10,Lateral Join,我有一个SELECT语句,它使用JSON函数,在升级到PostgreSQL 10时停止工作 SELECT CASE WHEN type = 'a' THEN data #>> '{key_a,0}' WHEN type = 'b' THEN data #>> '{key_a,0,key_b,0}' WHEN type = 'c' THEN jsonb_object_keys(data

我有一个SELECT语句,它使用JSON函数,在升级到PostgreSQL 10时停止工作

SELECT
        CASE 
            WHEN type = 'a' THEN data #>> '{key_a,0}'
            WHEN type = 'b' THEN data #>> '{key_a,0,key_b,0}'
            WHEN type = 'c' THEN jsonb_object_keys(data #> '{key_c,key_d}')
            ELSE NULL
        END AS foo,
        CASE
            WHEN type = 'a' THEN jsonb_array_elements_text(data -> 'key_e')
            WHEN type = 'b' THEN data #>> '{key_f,0,key_g}'
            ELSE NULL
        END AS bar
错误:在这种情况下不允许设置返回函数

提示:您可能可以将set returning函数移动到一个横向FROM项中

我不明白如何使用横向从是一种选择。事实上,我不完全理解为什么会使用侧向,即使在阅读时也是如此


您知道如何将此语句转换为与第10页一起使用吗?

只要这些设置的返回函数中没有一个返回超过一行,您就可以将它们放在子查询中以绕过限制:

SELECT
        CASE 
            WHEN type = 'a' THEN data #>> '{key_a,0}'
            WHEN type = 'b' THEN data #>> '{key_a,0,key_b,0}'
            WHEN type = 'c' THEN (SELECT jsonb_object_keys(data #> '{key_c,key_d}'))
            ELSE NULL
        END AS foo,
        CASE
            WHEN type = 'a' THEN (SELECT jsonb_array_elements_text(data -> 'key_e'))
            WHEN type = 'b' THEN data #>> '{key_f,0,key_g}'
            ELSE NULL
        END AS bar

只要这两个函数都不会返回超过1行的数据,只有您才能根据您的数据知道,您就可以将它们放在一个子选择中:然后选择jsonb_object_keydata>“{key_c,key_d}”@eurotrash,这在我的情况下是有效的,谢谢!如果你把你的评论转移到一个答案上,我很乐意接受。