从选择查询中排除基于多列的行
Posted
技术标签:
【中文标题】从选择查询中排除基于多列的行【英文标题】:Exclude rows based on multiple columns from select query 【发布时间】:2021-05-05 14:08:12 【问题描述】:我有一个如下所示的表格:
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
输入到查询中,也许使用 NOT IN?
例如,(不是真正的代码),类似:
SELECT * FROM mytable WHERE p_id = ? AND j_id = ?
AND NOT IN(rowsToExclude)
LIMIT 10
相关:
Select NOT IN multiple columns
Can you use multiple columns for a not in query?
【问题讨论】:
使用主键过滤掉行。表有PK吗? 表没有主键 没有 ORDER 的限制很少有意义。 行被抓取后会被删除,这是在循环中完成的,直到所有行都被删除,所以我认为这里不需要 ORDER BY。 【参考方案1】:您可以使用八个参数,而不仅仅是两个。
例如,你可以这样做:
SELECT *
FROM mytable
WHERE p_id = ? AND j_id = ?
and (p_id, j_id, u_id) not in ((?, ?, ?), (?, ?, ?))
LIMIT 10
我会假设 1
、3
、5
、7
、8
和 9
是字符串,因为表列是 VARCHAR
。
注意:此策略不适用于空值。
【讨论】:
谢谢,你有机会知道如何使用像这样的 jdbi fluent api 来做到这一点***.com/a/55921388/12177456以上是关于从选择查询中排除基于多列的行的主要内容,如果未能解决你的问题,请参考以下文章
Primefaces:从p:dataTable中的行选择中排除列