大家好,我需要做一些查询参数过滤查询。我需要的是,如果查询参数为空,则不计算查询条件(例如=或LIKE ),并向我返回所有内容。我正在使用R2DBC,但我找不到解决方法。
发布于 2021-07-20 18:02:27
一个有效的通用预准备语句可能是:
SELECT *
FROM yourTable
WHERE col = ? or ? IS NULL;如果将NULL值从模糊层绑定到?,则WHERE子句将始终为true,返回表中的所有记录。
发布于 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:
SELECT *
FROM t
WHERE col = nvl(:bind, col)但是,像您这样的查询通常最好使用dynamic SQL, such as supported by a third party library like jOOQ来实现
Flux<TRecord> result =
Flux.from(ctx
.selectFrom(T)
.where(bind == null ? noCondition() : T.COL.eq(bind))
);显然,您也可以直接使用R2DBC和您自己的动态SQL库或任何其他类似的库来完成此操作。
免责声明:我为jOOQ背后的公司工作。
https://stackoverflow.com/questions/68452911
复制相似问题