Sql 无法从标量中提取元素

Sql 无法从标量中提取元素,sql,json,postgresql,jsonb,Sql,Json,Postgresql,Jsonb,我有两张桌子和两个联系人。联系人在JSONB列中有地址。 我在contacts.linked_to_company上使用jsonb_array_elements company.addresses尝试了一个带有联接的select语句,但我得到了错误“无法从标量中提取元素”,我理解这是因为某些条目的列地址中确实有[null]。我已经看到了使用合并或案例陈述的答案。Coalesce I可能无法工作,示例在select语句中,如何在联接中使用它? 下面是sql SELECT company.id, t

我有两张桌子和两个联系人。联系人在JSONB列中有地址。 我在contacts.linked_to_company上使用jsonb_array_elements company.addresses尝试了一个带有联接的select语句,但我得到了错误“无法从标量中提取元素”,我理解这是因为某些条目的列地址中确实有[null]。我已经看到了使用合并或案例陈述的答案。Coalesce I可能无法工作,示例在select语句中,如何在联接中使用它? 下面是sql

SELECT company.id,
trading_name, 
nature_of_business, 
t.id contactID, 
address->>'PostCode' Postcode,
position_in_company
FROM contact t FULL JOIN company ON (t.company_linked_to = company.id ),
jsonb_array_elements(t.addresses) address
  WHERE
 t.company_linked_to ='407381';
下面是示例jsonb

[{"PostCode":"BN7788","Address":"South Street","AddressFull":"","Types":[{"Type":"Collection"}]}]

您可以尝试其中一种,而不是jsonb_array_elementst.address:

jsonb_数组_元素 案例jsonb_地址类型 当“array”之后是地址 否则“[]”结束 作为地址 -或 jsonb_数组_元素 案例jsonb_地址类型 当“array”之后是地址 否则“[{PostCode:null}]”结束 作为地址 第一种方法隐藏列的json格式不正确的行,第二种方法为它们提供null

但是,问题实际上源于列中的一个或多个值不是json数组。您可以使用以下命令轻松修复它:

更新联系人 设置地址='[null]' -或 -设置地址=“[{PostCode:null}]” 其中jsonb_typeof地址为“array”或地址=“[]”;
更正后,您将不需要jsonb_array_元素中的大小写。

谢谢您的回答,如果我想从jsonb中检索所有信息,即Address、AddressFull,如果没有有效的“array”,jsonb中的每个字段是否都必须在ELSE语句中为空?数据更正是一个更好的解决方案,查看更新的答案。我正在寻找的答案!帮助解决Postgresql 10更新导致的案例问题和SRF。将案例移动到jsonb_数组_元素内部,而不是外部。也可参考其他路人的博客: