gpt4 book ai didi

java - Spring namedParameterJdbcTemplate 和一个列表参数 : how to check if it is null in SQL?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:27 25 4
gpt4 key购买 nike

我正在使用 spring 的 NamedParameterJdbcTemplate,因为我的 SQL 查询中有一个 SELECT ... IN (),如 here 所述.

在我们的具体案例中,业务逻辑应该是: - 如果要检查的 id 列表为 null 或为空,则忽略整个 IN 条件 - 如果列表包含 id,则像平常一样使用 IN 条件

所以我们这样编程:

SELECT * FROM table WHERE (:ids IS NULL or table.column IN (:ids))

如果 :ids 确实是 NULL 或空列表,则此查询有效,但如果不是,则查询失败,因为 spring 为 3 个值的列表填充参数的方式是这样的:

SELECT * FROM table WHERE ((?,?,?) IS NULL or table.column IN (?,?,?))

并且您不能对三重问号语句执行“IS NULL”。有什么简单的方法可以直接在 SQL 查询中解决这个问题,而不是使用 Java 代码(我们不想在 Java 中的 sql 查询中进行字符串操作)?

最佳答案

你可以尝试像这样颠倒顺序:

SELECT * FROM table WHERE (table.column IN (:ids) or :ids IS NULL)

由于您的 3 id 案例将满足第一个条件,因此可能不会评估“或”。不过,这可能取决于您的数据库。这适用于 Hibernate + Oracle,但我没有看到它适用于 Sybase IQ + NamedParameterJdbcTemplate,因此您的里程可能会有所不同。

如果您的数据库支持公用表表达式 (CTE),您可以试试这个:

with 
x as (
select column
from table
where column in (:ids)
)
select *
from table
where (table.column in (:ids) or (select count(*) from x) = 0)

关于java - Spring namedParameterJdbcTemplate 和一个列表参数 : how to check if it is null in SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49157792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com