Как это и бывает всегда, четыре таблицы образуют декартово произведение из
своих строк, а затем на основе условия
WHERE «лишние» строки отбрасывают-
ся. В этом условии используется условный оператор CASE. Он позволяет нам
поставить допустимый номер ряда в зависимость от класса обслуживания:
WHERE
CASE WHEN fare_condition = 'Business'
THEN seat_row::integer <= max_seat_row_business
WHEN fare_condition = 'Economy'
THEN seat_row::integer > max_seat_row_business
AND seat_row::integer <= max_seat_row_economy
В этом выражении используется операция приведения типа: seat_row::integer.
Она необходима, т. к. в виртуальной таблице номера рядов представлены в ви-
де символьных строк, а для выполнения сравнения числовых значений в данной
ситуации нужен целый тип. При написании условного оператора нужно учесть,
что в виртуальной таблице мы указали не количество рядов в бизнес-классе и
экономическом классе, а номера
последних
рядов в этих классах. Поэтому воз-
никает конструкция
Достарыңызбен бөлісу: