如果组中至少有一个记录满足某个条件,如何编写一个查询来排除记录组?

ghhaqwfi  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(290)

我需要编写一个查询,仅当一组具有特定属性的记录中没有记录时,才从表中选择记录。
在上下文中,表是offers(如房地产)。可以有多个具有相同id的报价。id定义了分组。另一个字段是status,可以是'pending'、'countered'、'accepted'、'rejected'、'expired'、'draft'。另一个字段是用户的id。假设一个买家出价了。将在数据库中创建一个新的报价,状态为“待定”且买家id为。然后卖方可能决定还盘。这将插入另一个具有相同offer id但状态为“countered”和卖家用户id的记录。这将一直持续到报价被“接受”或“拒绝”或“过期”。
我想编写一个查询,选择所有未被拒绝、未过期和未草稿的报价。
我能想到的最好的办法是:

select distinct offer_id 
from offers
where 
    listing_id = ${listingId} 
    and offer_id not in (
        select offer_id 
        from offers 
        where status = 'Rejected' or status = 'Expired' or status = 'Draft'
    )

这是可行的,但是嵌套的select使它非常低效。我想使用联接来排除拒绝、过期和草稿的状态。有可能吗?
谢谢

omqzjyyz

omqzjyyz1#

如果我没记错的话,你可以 offer_id 并使用 having 筛选出任何报价的条款 status 被拒绝、过期或草稿:

select offer_id
from offers
where listing_id = ? 
group by offer_id
having not bool_or(status in ('Rejected', 'Expired', 'Draft'))

相关问题