PostgreSQL 全部

Posted

技术标签:

【中文标题】PostgreSQL 全部【英文标题】:PostgreSQL IN all 【发布时间】:2021-02-17 06:29:54 【问题描述】:

我的表结构如下:

| id | object_id | status_id |
------------------------------
| 1  |     12    |     1     |
| 2  |     12    |     2     |
| 3  |     18    |     5     | 

我需要选择所有处于状态 1 和 2 的 object_id。也就是说,类似这样的内容:select object_id from table_name where status_id in (1, 2),但我需要 status_id 不在列出的值之一中,而在两者中.也就是说,从上表中,我应该返回值 12(因为状态中的 object_id 等于 12)。如何做到这一点?

【问题讨论】:

为什么必须是 12? 1 在集合中 (1, 2) @Andronicus 我需要得到一个object_id,其中包含状态1和2的条目,所以它返回12。为了清楚起见,我用sql in举了一个例子 您想要那些具有完全这两个状态值的对象,还是至少这两个值? @a_horse_with_no_name 正是这两个 【参考方案1】:

要获取具有完全这两个状态值的对象 ID,您可以使用

select object_id
from the_table
group by object_id
having bool_and(status_id in (1,2))
   and count(distinct status_id) = 2

Online example

【讨论】:

【参考方案2】:
select object_id 
from table_name 
where status_id in (1, 2)
group by object_id 
having count(distinct status_id) = 2

【讨论】:

【参考方案3】:

如果您只需要状态 1 或 2 的唯一对象 ID,则可以使用 distinct 关键字。:

select distinct object_id from table_name where status_id in (1, 2)

【讨论】:

返回错误结果dbfiddle.uk/… 如果状态为 1 或 2,则返回 object_id。我在回答中提到了这一点。 uf 想要的答案是拥有不同的 object_id,在 status 字段中同时具有 1 和 2,然后 group by 是一个简单的解决方案。

以上是关于PostgreSQL 全部的主要内容,如果未能解决你的问题,请参考以下文章

postgresql数据库psql控制台操作命令

Odoo 后端数据库postgreSQL事务级别

Windows 上安装 PostgreSQL 详解

PostgreSQL CheckPoint设置(转)

Postgresql 是 1 个查询还是多个?

将 PostgreSQL 主键重置为 1