带有 SQL IN 运算符的动态 SQL 子句

问题描述 投票:0回答:1

我有一个 SQL 模板文件,其中包含以下子句:

 AND (%s = '' OR type in (%s))

这里有一个问题,当

type
的值为
type1
时,查询变成

AND ('type1' = '' or type in ('type1'))

这太完美了。在我的 JAVA 代码中,我使用

String.format
%s
替换为所需值,并且还具有字符串值中提供的
'

问题是当我有多个值时,比如说我有

type1
type2
。然后我的代码将其翻译为

AND ('type1', 'type2' = '' or type in ('type1', 'type2')

很明显,第一个布尔条件语法是无效的。我尝试这样做是因为在我的用例中

type
有时是过滤器子句的一部分,有时则不是。我该如何解决这个问题?我可以修改模板,但不知道如何/修改什么来解决这个问题。

java sql google-bigquery
1个回答
0
投票

您可以根据类型是否为 NULL 或有值来更新模板。

String types = "'type1', 'type2'"; 
// String types = "'type1'";
// String types = ""; 
// String types = null;

String sqlTemplate = "AND (type = '' OR type IS NULL %s)";

String sqlQuery = String.format(
    sqlTemplate, 
    (types == null || types.isEmpty()) ? "" : "OR type IN (" + types + ")"
);
© www.soinside.com 2019 - 2024. All rights reserved.