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 全部的主要内容,如果未能解决你的问题,请参考以下文章