json - postgresql json_object_keys(var1) 消除 var1 为 null 的记录

标签 json postgresql

我正在尝试 postgresql 9.3.4 中的一些 JSON 功能。

我在使用 json_object_keys(var1) 时遇到问题,它会删除 var1 为 null 的行。

如何调整查询以保留这些记录,在这种情况下填充 null

例如,我有一个表test1:

postgres=# select * from test1;
 var1 |       var2        
------+-------------------
    1 | {"a": 20, "b":30}
    2 | 

postgres=# select var1,json_object_keys(var2) from test1;
 var1 | json_object_keys 
------+------------------
    1 | a
    1 | b

我希望输出是这样的:

postgres=# select var1, json_object_keys(coalesce(var2,'{"": null}')) from test1;
 var1 | json_object_keys 
------+------------------
    1 | a
    1 | b
    2 | 

只是想知道是否有更好的方法?

最佳答案

不要使用 PostgreSQL 对 SELECT 列表中的集合返回函数的相当古怪的支持,而是使用横向查询。

我最初编写了不正确查询:

select t.var1, k from test1 t, json_object_keys(t.var2) k;

但这是错误的,因为隐式横向是交叉联接,而零行的交叉联接仍然是零行。

你想要:

SELECT t.var1, k
FROM test1 t 
LEFT JOIN LATERAL (
  SELECT t.var1, k 
  FROM json_object_keys(t.var2) k
) lj(var1, k) 
ON (t.var1 = lj.var1);

例如

regress=> CREATE TABLE test1 ( var1 integer, var2 json );
CREATE TABLE
regress=> INSERT INTO test1 (var1, var2) VALUES (1, '{"a": 20, "b":30}'), (2, NULL);
INSERT 0 2
regress=>   SELECT t.var1, k
regress->     FROM test1 t 
regress->     LEFT JOIN LATERAL (
regress(>       SELECT t.var1, k 
regress(>       FROM json_object_keys(t.var2) k
regress(>     ) lj(var1, k) 
regress->     ON (t.var1 = lj.var1);
 var1 | k 
------+---
    1 | a
    1 | b
    2 | 
(3 rows)

它评估每个 json 字段的 json_object_keys,然后根据输入对结果进行左连接。

关于json - postgresql json_object_keys(var1) 消除 var1 为 null 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867791/

相关文章:

javascript - jQuery .each 循环不循环,但当你 console.log 时却循环?

php - 从多个 PHP 数组创建 JSON

javascript - 谷歌地理 map JSON

mysql - 可以指示 MySQL/Postgres 忽略索引或列吗?

java - org.postgresql.util.PSQLException : ERROR : relation does NOT exist PreparedStatement.executeQuery()

postgresql - pgadmin4 : postgresql application server could not be contacted.

sql - Postgres 重叠日期范围以供查看

asp.net - 如何在 JSON.NET 中对单引号/撇号进行编码

c# - 如何在 "azure function"上模拟 HttpRequest

json - 如何计算 Postgres JSON 数组中的整体百分比?