簡體   English   中英

數組參數,參數為空時為select

[英]Array parameter, select all when the parameter is empty

語境

我正在使用 Google BigQuery 和 Django 來制作將從數據庫返回數據的參數化端點。

我正在使用數組作為參數,使用ArrayQueryParameter()根據多個職位過濾數據。

問題

目前我正在過濾這樣的數據:

# Query
...
WHERE jobtitle in UNNEST(@jobtitle_param)
# param and building the query

jobtitle_param = self.request.query_params.get('jobs').split(',') if self.request.query_params.get('jobs') else ["%"]

...

job_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.ArrayQueryParameter("jobtitle_param", "STRING", jobtitle_param),
    ]
)

當職位參數未傳遞到端點時,我想返回所有職位的數據,如%所做的那樣:

WHERE something LIKE "%"

未傳遞參數jobs時返回所有職位數據的最佳方法是什么?

所以我通過更改查詢來解決這個問題:

...
WHERE jobtitle in UNNEST(@jobtitle_param)

至:

WHERE EXISTS (
    SELECT 1
    FROM UNNEST(@jobtitle_param) AS jobs
    WHERE jobtitle LIKE jobs

並將參數的默認值設置為通配符% ,如下所示:

jobtitle_param = self.request.query_params.get('jobs').split(',') if self.request.query_params.get('jobs') else "%".split(' ')

演出晚了,但我解決這個問題的方法是創建一個條件,如果參數列表為空,特別是ARRAY_LENGTH(@my_array) = 0 ,則評估為True 在您的情況下,結果將是

...
WHERE (jobtitle in UNNEST(@jobtitle_param) OR ARRAY_LENGTH(@jobtitle_param) = 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM