【发布时间】:2021-05-05 16:30:42
【问题描述】:
我有一张如下所示的表格:
CREATE TABLE public.mytable (
p_id varchar(40) NOT NULL,
j_id varchar(48) NOT NULL,
u_id varchar(255) NOT NULL
);
我使用以下方法根据 p_id 和 j_id 查找行:
SELECT * FROM mytable WHERE p_id = ? AND j_id = ? LIMIT 10
我想扩展这个查询,使它也排除一些行,例如,我有一个这样的列表:
class MyEntity {
public p_id
public j_id;
public u_id;
}
List<MyEntity> rowsToExclude = new ArrayList<>();
rowsToExclude.add(new MyEntity(1, 3, 5));
rowsToExclude.add(new MyEntity(7, 8, 9));
我如何将rowsToExclude 输入到查询中,例如在 SQL 中它看起来像这样:
SELECT *
FROM mytable
WHERE p_id = ? AND j_id = ?
and (p_id, j_id, u_id) not in ((?, ?, ?), (?, ?, ?))
LIMIT 10
我发现这个参考最接近我的需要,但并不完全:
https://stackoverflow.com/a/55921388/12177456
handle.createQuery("SELECT value FROM items WHERE kind in (<listOfKinds>)")
.bindList("listOfKinds", keys)
.mapTo(String.class)
.list();
// Or, using the 'vararg' definition
handle.createQuery("SELECT value FROM items WHERE kind in (<varargListOfKinds>)")
.bindList("varargListOfKinds", "user_name", "docs", "street", "library")
.mapTo(String.class)
.list();
【问题讨论】:
-
这能回答你的问题吗? Select NOT IN multiple columns
-
Another possibility - 您可以将要排除的值加载到临时表中并在联接或不存在子查询中排除它们吗?
-
您使用的是哪个数据库系统?
-
@Mark 我正在使用 postgres
标签: java sql postgresql jdbi