我有一个带有文本列的表,我想选择与用户提供的搜索参数列表匹配的所有行:
select * from value where value.text in ('Mary', 'Steve', 'Walter');
此外,如果找不到他的任何搜索词,我想通知用户。假设Value中不存在‘Steve’。Text列,我如何编写将显示‘Steve’的查询?因为该信息不存在于任何表中,所以我不知道如何使用SQL查询来完成它。
实际的Hibernate代码如下所示:
List<String> searchItemList = new ArrayList<>();
searchItemList.add("Mary");
searchItemList.add("Steve");
searchItemList.add("Walter");
Query query = em.createQuery("select v from Value as v where v.text in ( :searchitemlist )");
query.setParameter("searchitemlist", searchItemList);
List result = query.getResultList();
log.info("{}", result.size());
log.info("{}", result);
搜索项列表是用户提供的所有搜索词的列表。可以有几百行长。当前的解决方法是为每个搜索项搜索一次值表,并记录所有返回0行的查询。这是相当低效的,当然还有更好的方法?请指点一下。
1条答案
按热度按时间wwodge7n1#
您可以使用以下查询来获取数据库中存在的搜索项的数组
运行此查询后,如果我们假设答案存储在名为Result的数组中,notExistSearchListItems将为您提供最终结果