数组参数,当参数为空时全选



上下文

我正在与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)

最新更新