order_id | fulfilled
---------------------
166 | true
166 | true
167 | true
167 | false
167 | false
168 | true
我正在尝试仅选择所有具有相同order_id的行也具有fulfilled
true的id。
在上面的示例中,我只想返回order_ids 166、168。由于所有与这些ID匹配的行都满足true。
167不符合标准,因为其中一些错误。
完成此PostgreSQL的最佳方法是什么?
我尝试例如:
select
order_id, fulfilled
from orders_orderround
where fulfilled = true
order by order_id`
不起作用,因为它正在返回已满足true的任何记录。我尝试使用HAVING
,但仍然遇到问题。
答案 0 :(得分:2)
如果您只想要一个满足所有记录的订单ID列表,则可以使用聚合和带有having
子句的过滤器:
select order_id
from orders_orderround
group by order_id
having bool_and(fulfilled)
bool_and()
是一个handy Postgres aggregate function,如果所有输入值均为true,则返回 true,否则为false 。
答案 1 :(得分:0)
只需获取id,不包含在false填充满的行
select order_id
from orders_orderround a
where not exists
(
select 1 from orders_orderround b
where a.order_id = b.order_id and fulfilled = false
)