![](/img/trans.png)
[英]Update all records with same boolean if at least one record meets the criteria?
[英]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.