簡體   English   中英

如果組中至少有一條記錄滿足特定條件,如何編寫查詢以排除記錄組?

[英]How do I write a query to exclude groups of records if at least one record in the group meets a certain condition?

僅當具有特定屬性的一組記錄中沒有記錄時,我才需要編寫一個從表中選擇記錄的查詢。

為了說明這一點,該表是報價(如房地產)。 可以有多個具有相同 ID 的優惠。 id 定義了分組。 另一個字段是狀態,它可以是“待處理”、“已反駁”、“已接受”、“已拒絕”、“已過期”、“草稿”。 另一個字段是用戶的 id。 因此,假設買家提出了要約。 將在數據庫中創建狀態為“待定”和買方 ID 的新報價。 然后賣方可能決定還價。 這將插入另一條具有相同報價 id 但狀態為“countered”的記錄和賣家的用戶 id。 這將開啟 go 直到報價被“接受”或“拒絕”或“過期”。

我想編寫查詢來選擇所有未被拒絕、未過期且未草稿的報價。

我能想到的最好的是:

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 使其效率非常低。 我想使用連接來排除拒絕、過期和草稿的狀態。 那可能嗎?

謝謝

如果我正確地關注了您,您可以按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'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM