Перевод заказов в режим ожидания
Далее нужно выполнить запрос, который изменяет все вызывающие проблемы заказы. Этот запрос должен отыскать все записи заказов, найденные запросом OrdersWithOutOfStockltems,и изменить их.
Какое решение? Конечно же запрос на обновление, подобный описанному ранее в этой главе. В нем следует использовать таблицу Ordersи два поля:
■ поле ID применяется для поиска записей заказов, которые вы хотите откорректировать;
■ поле OnHoIdменяется на Да для перевода заказа в режим ожидания.
Вы уже знаете достаточно для того, чтобы добавить оба поля в запрос и заполнить свойство Обновлениеполя OnHold(значением Да). Труднее всего найти нужные записи. Ясно, что необходимо найти заказы, содержащие одно из значений ID, которые вы отыскали в запросе OrdersWithOutOfStockltems.Но как использовать этот запрос в запросе на обновление?
Для решения этой задачи необходимо применить пару новых хитростей в условии отбора. Во-первых, нужно использовать ключевое слово In, проверяющее, попадает ли значение в заданный список значений. Далее приведен пример действующего условия с ключевым словом In:
In (14,15,16)
Это условие фильтрации отбирает любые записи с кодами 14,15 или 16-
Ясно, что вводить вручную все значения ID очень трудоемко. Гораздо разумнее еще раз выполнить работу, проделанную во время создания запроса OrdersWithOutOfStockltems.
Для воплощения этой идеи вам придется воспользоваться еще одним необычным средством: подзапросом.
Подзапрос — это запрос, встроенный внутрь другого запроса. При написании подзапроса вам придется использовать язык SQL, с которым вы познакомились в главе 6. Начать следует
со слова SELECT, затем перечислить поля, которые вы хотите получить, за ними вставить слово FROM и завершить все именем таблицы или запроса, которые используются. Далее приведена команда на SQL для запроса на выборку, извлекающего все ID (коды) заказов из запроса OrdersWithOutOfStockltems:
SELECT OrderID FROM OrdersWithOutOfStockltems
Теперь, когда у вас есть оба нужных вам компонента, следует соединить их вместе в одном суперэлегантном условии отбора. Далее приведено окончательное выражение:
In (SELECT OrderID FROM OrdersWithOutOfStockltems)
Поместите это условие отбора в поле ID. Оно получит все коды (ID) проблемных заказов с помощью запроса OrdersWithOutOfStockltemsи затем сравнит их с полным набором записей в таблице Orders.Окончательный запрос на изменение показан на рис. 8.10.
Рис. 8.10. Этот запрос на обновление (PutOutOfStockOrdersOnHold (перевод заказов отсутствующими продуктами а режим ожидания)) гарантирует, что клиенты компании Boutique Fudge будут довольны в будущем. Он выбирает заказы с отсутствующими на складе продуктами и изменяет поле OnHold. Теперь вам достаточно убедиться в том, что представители отдела обслуживания клиентов вежливы
Если вы создали похожий запрос, возможно, вам захочется включить в БД и запрос, выполняющий обратное действие и возвращающий заказы из режима ожидания вдействующие при пополнении запаса нужных продуктов. Применяя знания, полученные в данном разделе, вы без проблем разработаете необходимый запрос.
Глава 9