我正在以下 SQL 查询中寻求帮助,其中列 policy_array 在某些行中具有 NULL 值,但在其他行中具有策略数据数组。即使输出中的policy_array 为NULL,我也希望能够包含行中的数据。
当我执行下面的查询时,它会按预期执行 CROSS JOIN UNNEST,但也会按预期删除policy_array 列中带有 NULL 的列中的所有数据。我可以想象通过建立一个中间表来解决这个问题,其中policy_array 中的 NULL 被更改为其他内容,但我真的不想这样做。
SELECT
policy,
account_id,
rejects,
overturns,
appeals,
submits
FROM relevant_table
CROSS JOIN UNNEST(policy_array) AS p (policy)
WHERE
...
有两个选项
LEFT JOIN
和 on true
:
FROM relevant_table
LEFT JOIN UNNEST(policy_array) AS p (policy) ON true
或者更黑客一点,它使用
unnest
支持多个数组这一事实 - 添加带有一个元素的数组(另请注意交叉连接取消嵌套的简洁语法):
FROM relevant_table,
UNNEST(policy_array, array[1]) AS p (policy, ignored)