Мне нужно написать запрос, который выбирает записи из таблицы только в том случае, если в группе записей нет записи с указанным свойством c.
Чтобы поместить это в контекст, таблица предлагает (как в сфере недвижимости). Может быть несколько предложений с одним и тем же идентификатором. Идентификатор - это то, что определяет группировку. Другое поле - статус, которое может быть «ожидающим», «встреченным», «принятым», «отклоненным», «просроченным», «черновиком». Другое поле - это идентификатор пользователя. Допустим, покупатель сделал предложение. В базе данных будет создано новое предложение со статусом «на рассмотрении» и идентификатором покупателя. Тогда продавец может принять решение о встречной оферте. Это приведет к вставке другой записи с тем же идентификатором предложения, но со статусом «встречено» и идентификатором пользователя продавца. Это будет go до тех пор, пока предложение не будет либо «принято», либо «отклонено», либо «не истекло». 1005 *
Лучшее, что я могу придумать, это:
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'
)
Это работает, но вложенный выбор делает его действительно неэффективным. Я хотел бы исключить статус отклоненного, просроченного и черновика, используя вместо этого объединения. Это возможно?
Спасибо