首页 > 解决方案 > COALESCE 的所有参数都为空时的替代方案

问题描述

我正在开发一个 Web 应用程序(java-maven 项目),我使用的查询有问题。我的网络应用程序的 UI 有 2 个搜索字段:PTTID. 用户需要填写至少一个字段才能进行搜索。所以这两个字段都可以为空,但不能同时为空。以前,我只有一个字段:PTR它显示大小为 52 的结果数组。(如果我执行,也会得到相同的数字select * from users where ptr='smthing')。之后,我添加了ID字段并更新了我的查询,如下所示:

我在我的网络服务中执行这个查询:

String query= "SELECT t.ptr, t.id ";
        query+= "FROM users t ";
        query+= "WHERE t.ptr = COALESCE(?, t.ptr) AND " ;
        query+= "t.id = COALESCE(?, t.id) ";

并在 Prepared Statement 的帮助下设置字段。

现在,如果该ptr字段已填充,但idUI 上的字段为空白(这可以是 null 或空字符串)并且用户进行搜索,结果数组大小变为 30。我与数据库进行比较,它不会获取ID为 null的行. 所以coalesce当它的两个参数(?,t.ptr)都为空时,这不是我需要的。我该如何解决这个问题,有什么建议吗?

标签: javasqloracleplsql

解决方案


我认为你想要的逻辑是:

WHERE (t.ptr = ? OR ? IS NULL) AND 
      (t.id = ? OR ? IS NULL)

我建议使用命名参数,因此您不必将它们传递两次。


推荐阅读