首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R2dbc过滤查询

使用R2dbc过滤查询
EN

Stack Overflow用户
提问于 2021-07-20 17:55:45
回答 2查看 76关注 0票数 1

大家好,我需要做一些查询参数过滤查询。我需要的是,如果查询参数为空,则不计算查询条件(例如=或LIKE ),并向我返回所有内容。我正在使用R2DBC,但我找不到解决方法。

EN

回答 2

Stack Overflow用户

发布于 2021-07-20 18:02:27

一个有效的通用预准备语句可能是:

代码语言:javascript
复制
SELECT *
FROM yourTable
WHERE col = ? or ? IS NULL;

如果将NULL值从模糊层绑定到?,则WHERE子句将始终为true,返回表中的所有记录。

票数 0
EN

Stack Overflow用户

发布于 2021-07-27 21:38:57

如果您更喜欢使用"static SQL语句“(意思是对所有可能的绑定值使用单个SQL字符串),那么在Oracle中,无论您是否使用R2DBC,它都可能是optimal to use NVL() to profit from an Oracle optimiser feature, as explained in this article

代码语言:javascript
复制
SELECT *
FROM t
WHERE col = nvl(:bind, col)

但是,像您这样的查询通常最好使用dynamic SQL, such as supported by a third party library like jOOQ来实现

代码语言:javascript
复制
Flux<TRecord> result =
Flux.from(ctx
        .selectFrom(T)
        .where(bind == null ? noCondition() : T.COL.eq(bind))
     );

显然,您也可以直接使用R2DBC和您自己的动态SQL库或任何其他类似的库来完成此操作。

免责声明:我为jOOQ背后的公司工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68452911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档