PostgreSQL错误:JSON集返回函数的情况
我有一个SELECT语句,它使用JSON函数,在升级到PostgreSQL 10时停止工作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
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,这在我的情况下是有效的,谢谢!如果你把你的评论转移到一个答案上,我很乐意接受。