[英]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
字符串来存储它,应该没问题。 但是在写的同时,还应该把它的内容分表/列/行。 因此,您可以更轻松地访问其内容。
这个想法是:
这只是您应该做什么的一个示例。 您可能需要找到漂亮的名称来反映每个对象的业务价值。
表“id”
ID | 名称 |
---|---|
1 | 马诺哈尔 |
表“id_status”
ID | 地位 | 日期 |
---|---|---|
1 | 不活跃 | 13/12/2021 |
1 | 积极的 | 13/12/2022 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.