繁体   English   中英

Sql中的子查询

[英]Sub Queries in Sql

我在我的应用程序中使用 postgres 作为数据库。

因为我有一个 jsonb 列并用于在其中存储 json 数据。

{
    "id": "manohar",
    "array": [
        {
            "status": "active",
            "date": "13/12/2022"
        },
        {
            "status": "InActive",
            "date": "13/12/2021"
        }
    ]
}

因此,每次我编写子查询以根据数组对象内的最大日期选择任何字段时,都会在这里。 这里的问题是我在每个 json 对象中有 100 个字段,所以每次我必须为每个字段编写子查询时。

使用子查询后,性能看起来会降低。

这是我正在使用的查询

Select 

(select t.sub_array->>'status'
from tbl_name d
  cross join lateral (
     select t.item  as sub_array
     from jsonb_array_elements(d.column_name -> 'array') as t(item)
      where t.item ->> 'date' <= TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')
     order by (t.item ->> 'date')::date desc
     limit 1
 ) t where t.primaryKey = d.key) as status

--like I have to write 100 subqueries for 100's fields 

from tbl_name t
where t.id='3'

我不想将视图用于此要求。

任何更好的方法或建议都会有所帮助。

谢谢..

您必须使用lateral view来访问 JSON。 但是在数据库中存储和访问 JSON 并不是 SQL 最佳实践的一部分。

在您的情况下,我只能建议您更改数据模型。 存储JSON是一回事,你可以使用blob字符串来存储它,应该没问题。 但是在写的同时,还应该把它的内容分表/列/行。 因此,您可以更轻松地访问其内容。

这个想法是:

  • 要么你花时间正确地编写它(制作一个漂亮的数据架构)
  • 或者您花时间正确阅读它(进行复杂的 SQL 查询)

这只是您应该做什么的一个示例。 您可能需要找到漂亮的名称来反映每个对象的业务价值。

表“id”

ID 名称
1 马诺哈尔

表“id_status”

ID 地位 日期
1 不活跃 13/12/2021
1 积极的 13/12/2022

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM