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