Учебно-практическое пособие москва 2017 ббк


( SELECT departure_city, arrival_city



Pdf көрінісі
бет169/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   165   166   167   168   169   170   171   172   ...   243
Байланысты:
Язык SQL. Базовый курс

( SELECT departure_city, arrival_city
FROM flights_v
WHERE flight_id = ( SELECT flight_id FROM sell_ticket )
);
173


UPDATE 1
Этот запрос работает следующим образом. Добавление новой записи о бронировании
авиаперелета производится в общем табличном выражении, а наращивание соответ-
ствующего счетчика — в главном запросе. Поскольку в общем табличном выраже-
нии присутствует предложение RETURNING *, значения атрибутов добавленной стро-
ки будут доступны в главном запросе посредством обращения к временной таблице
sell_ticket. Конечно, если строка фактически не будет добавлена из-за дублирования
значения первичного ключа, тогда будет сгенерировано сообщение об ошибке, в ре-
зультате главный запрос выполнен не будет, следовательно, таблица tickets_directions
не будет обновлена.
В главном запросе мы обновляем всего два атрибута, причем, значение атри-
бута tickets_num может увеличиться только на единицу, поскольку в таблицу
ticket_flights_tmp добавляется одна строка. Остается выяснить, каким образом мы
сможем определить ту строку в таблице tickets_directions, атрибуты которой нуж-
но обновить. Нам требуется на основе значения идентификатора рейса flight_id, на
который был забронирован билет (перелет), определить города отправления и при-
бытия, которые как раз и идентифицируют строку в таблице tickets_directions. Эти
три атрибута присутствуют в представлении flights_v. Подзапрос обращается к этому
представлению, а вложенный подзапрос возвращает значение идентификатора рей-
са flight_id, на который был забронирован билет (перелет). Назначение вложенного
подзапроса в том, чтобы в условии WHERE flight_id = ... не дублировать значение ат-
рибута flight_id, использованное в команде INSERT (в данном примере это 30829). Тем
самым должен быть снижен риск ошибки при вводе данных.
Обратите внимание, что подзапрос в предложении WHERE возвращает два столбца,
и сравнение выполняется также сразу с двумя столбцами.
Посмотрим, что получилось:


Достарыңызбен бөлісу:
1   ...   165   166   167   168   169   170   171   172   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет