查询不在表中的值的id列表



我有一个id列表,我想过滤数据库表中不存在的值。

像这样:

SELECT ids
FROM   (VALUES('id1'),
('id2'),
('id3'),
('id4')) I(ids)  
EXCEPT
SELECT ids
FROM Users

是否有办法用条件查询做到这一点?

也许这就是你正在寻找的:

我们将创建一个带有n个位置参数的字符串sql,创建一个jpa查询对象,设置参数,然后根据需要执行查询以获取resultList。

String queryString = "SELECT ids FROM Users WHERE ids NOT IN (";
//assuming idList is list of ids to exclude
for (int i =0; i<idList.size();++i)
queryString +=i==0?"?":",?";
queryString +=");"
Query query = entityManager.createQuery(queryString, String.class);
for (int i =0; i<idList.size();++i)
query.setString(idList[i]);
List<String> result= query.getResultList();

这是不可能的。您必须查询与您所拥有的列表匹配的id,并找出自己缺少的内容:

var q = cb.createQuery(Integer.class);
var u = q.from(Users.class);
q.select(u.get("id"));
q.where(u.get("id").in(ids));
var list = em.createQuery(q).getResultList();
ids.removeAll(list);
// Now ids contains the ids that are missing

最新更新