Предположим, что у меня есть 6 таблиц: Users, Customers, Providers
(каждый пользователь должен быть или клиентом, или поставщиком), Requests, Offers, Booking
.
Каждый клиент может опубликовать sh новый запрос, и каждый провайдер может сделать предложение для любого запроса, если клиент хочет, он может сделать заказ для одного из предложений (каждый запрос может иметь не более одного бронирования).
Я хочу создать запрос, который показывает для каждого запроса его статус, если есть нет предложения для этого запроса, покажите «Ожидание предложения», если есть хотя бы один запрос для этого запроса, но нет бронирования, покажите «Ожидание бронирования», и если для этого запроса есть бронирование, показывающее «закрыто».
Сначала я попробовал:
SELECT
R.RequestID, O.OfferID, B.OfferID,
CASE
WHEN O.OfferID IS NULL THEN 'Waiting for offer'
WHEN O.OfferID IS NOT NULL AND B.OfferID IS NULL THEN 'Waiting for booking'
WHEN B.OfferID IS NOT NULL THEN 'Closed'
END AS Status
FROM
Requests AS R
LEFT JOIN
Offers AS O ON O.RequestID = R.RequestID
LEFT JOIN
Bookings AS B ON B.OfferID = O.OfferID
Результаты:
это результаты этого запроса, я добавил столбцы offerID и BookingID, чтобы сделать его более понятным
Но, конечно, это явно не работает, потому что он возвращает бронирование и все предложения для каждого запроса, а для каждого предложения свое шоу «Ожидание бронирования» или «Закрыто».
Для этот экзамен Пожалуйста, вывод для requestID '300' Должен появиться только один раз со статусом 'closed'.
Я знаю, что мне нужно использовать в подзапросе для каждого запроса и проверять, есть ли предложения, и если да, проверьте, есть ли бронирование для этого запроса, но я не могу найти способ проверить эти проверки в подзапросе, есть ли способ или, возможно, переключить регистр или еще для этого?