【问题标题】: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。

标签: java sql postgresql jdbi


【解决方案1】:

您可以使用八个参数,而不仅仅是两个。

例如,你可以这样做:

SELECT * 
FROM mytable 
WHERE p_id = ? AND j_id = ?
  and (p_id, j_id, u_id) not in ((?, ?, ?), (?, ?, ?))
LIMIT 10

我会假设 135789 是字符串,因为表列是 VARCHAR

注意:此策略不适用于空值。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2021-04-28
  • 2013-08-06
相关资源
最近更新 更多