mysql - 如何查询可能未输入参数的对象列表?
问题描述
我正在尝试查询由用户可能根本没有输入的参数过滤的对象列表。
@Query(value = "SELECT * " +
"FROM project " +
"WHERE CASE WHEN (:location is not null) THEN location_Id LIKE :location" +
" and CASE WHEN (:category is not null) THEN category_Id LIKE :category", nativeQuery = true)
List<Project> getProjects(@Param("category") List<Category> category,
@Param("location") List<Location> location);
但是我不断收到类似的错误,即我的语法错误,即使我只是从教程中复制了它。知道我可能在哪里弄错了吗?
解决方案
如果你想要一个查询:
WHERE (:location is null OR location_Id LIKE :location) AND
(:category is null OR category_Id LIKE :category)
从性能的角度来看,OR
可能会扼杀性能(通过阻止使用可用索引)。通常应用程序为非参数值构建WHERE
子句。NULL
推荐阅读
- docker - 如何让 docker COPY 忽略文件权限?
- apache - Apache2 通配符未显示正确的 DocumentRoot
- c# - 在 RDLC 中证明
- android - setOnClickListener 在将主活动的数据替换为新活动时抛出空指针异常
- google-cloud-pubsub - Google PubSub 同步拉取不尊重 MaxOutStandingMessages
- python-3.x - Tensorflow 2.2.0 强化学习 - 模型参数的梯度为无
- javascript - 循环或数组但也移除 1 个对象?
- javascript - Angular 站点的多个 PWA
- c# - Umbraco:如何使用 IEnumerable IPublishedContent 对象填充 ViewModel?
- xamarin.forms - 选择器未触发所选项目