sql - 在 postgresql json 字段中选择键的唯一值

标签 sql ruby-on-rails json ruby postgresql

我有以下模型:

Shipment:
  reference_numbers: [] :json field

引用域的一般结构如下:

[{'reference_field_name': 'freight_number', 'reference_field_value': '0098'}, {'reference_field_name': 'bill_of_lading', 'reference_field_value': '1190' }]

此处的字段名称可能因交付而异。它可以是任何东西,而不仅仅是 bill_of_lading 和 freight_number。

跨 Shipments 的 reference_numbers 查找“reference_field_name”的所有唯一值的最佳方法是什么?

最佳答案

我知道,现在回答有点晚了,但是对于你们这些有类似任务的人来说,有一些很酷的 postgresql 特性:)

首先,让我们将 reference_numbers 取消嵌套到表中:

select jsonb_array_elements("reference_numbers") as fields from shipment

这将返回一个包含一列的行集,每一行将包含来自所有 reference_numbers 数组的一项。因此,如果您有两个装运行并且每个行在 reference_numbers 字段中有两个项目,那么此查询将返回 4 个项目。

其次,让我们选择不同的字段:

with fields_rowset as (
    select 
        jsonb_array_elements("reference_numbers") as fields 
    from shipment
)
select DISTINCT fields->'reference_field_name' from fields_rowset

请注意,我使用了 jsonb_* 函数,但如果您有 json 字段,则必须使用 json_* 替代。

关于sql - 在 postgresql json 字段中选择键的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41225833/

相关文章:

javascript - 如何搜索 JSON 对象来查找特定的参数值?

java - json官方java api : JSONArray of JSONObjects

sql - 如何使用不同的参数多次运行查询?

sql - 可变数据库名称

mysql - 从相似结果中过滤掉每组除一个结果以外的所有结果

ruby-on-rails - 将搜索功能提取到 Rails 中的表单对象

sql - vertica生成带有数字的表并选择素数

ruby-on-rails - Heroku + Mechanize 将 OBJ 变成字符串

ruby-on-rails - 单个自定义终端命令打开多个窗口,里面有不同的东西

json - 在 J2ME 中解析 json 时出错