簡體   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