Вложенный запрос: выберите результаты, которых нет в результатах другого запроса

#mysql #sql #join #sql-view

#mysql #sql #Присоединиться #sql-просмотр

Вопрос:

У меня есть этот sql-запрос, который находит текущее состояние EquipmentItem путем перекрестной ссылки на таблицу EquipmentItemReservations:

 SELECT EI.Id, ER.ReservationType AS Status 
FROM EquipmentItems AS EI 
  INNER JOIN EquipmentItemReservations AS ER ON EI.Id = ER.EquipmentItemId 
WHERE IsApproved = 1 
  AND DateShipped IS NOT NULL 
  AND DateReturned IS NULL
 

Таблица резервирования имеет тип резервирования либо «Назначенный», либо «Выделенный», который отображается как «статус», где это применимо.

Я хотел бы расширить этот запрос, чтобы получить элементы оборудования, которые не соответствуют требованиям, и установить «Доступно» в качестве статуса для остальных элементов.

Моя цель — иметь полный список элементов с включенным их статусом («Назначено», «Выделено» или «Доступно»)

Комментарии:

1. пожалуйста, предоставьте образец данных и желаемый результат

2. dba.stackexchange.com/help/how-to-ask

Ответ №1:

Я смог добиться этого с помощью этого запроса (сделал его представлением SQL).:

 CREATE VIEW view_EquipmentItemStates AS 
    SELECT EI.Id, ER.ReservationType AS Status 
    FROM EquipmentItems AS EI LEFT JOIN EquipmentItemReservations AS ER 
    ON EI.Id = ER.EquipmentItemId 
    WHERE IsApproved = 1 AND DateShipped IS NOT NULL AND DateReturned IS NULL 
    UNION SELECT EquipmentItems.Id, 'Available' As Status 
    FROM EquipmentItems WHERE EquipmentItems.Id NOT IN (
        SELECT EI.Id FROM EquipmentItems AS EI LEFT JOIN EquipmentItemReservations AS ER 
        ON EI.Id = ER.EquipmentItemIdWHERE IsApproved = 1 AND DateShipped IS NOT NULL 
        AND DateReturned IS NULL)