Я работал на этом упражнении на Codecademy в течение нескольких дней и до сих пор не мог понять, логика it.Below этом упражнение и код:SQL коррелирует подзапросы
Было бы интересно сделать заказ авиабилетов, давая им порядковый номер, основанный на времени, носителем. Например, если предположить, flight_id приращения с каждым дополнительным рейсом, мы могли бы использовать следующий запрос для просмотра полеты носителя, полетной идентификатор и порядковый номер:
SELECT carrier, id,
(SELECT COUNT(*)
FROM flights f
WHERE f.id < flights.id
AND f.carrier=flights.carrier) + 1 AS flight_sequence_number
FROM flights;
Я могу понять, что f
виртуальная форма таблицы flights
, но что делает f.id < flights.id
? Означает ли это, что SQL сравнивает каждую строку в f
с каждой строки в flights
как
сравнить MQ 17107 с MQ 7869,
сравнить MQ 17107 с MQ 2205,
сравнить MQ 17107 с MQ 14979
......
сравнить MQ 7869 с MQ 2205,
сравнить MQ 7869 Wi й MQ 14979
......
Помимо, что же это на самом деле COUNT(*)
рассчитывать? И почему +1
?
Это результат изображения: query result
Любая помощь будет оценена. Благодарю.
Подсчитайте количество полетов перед текущим идентификатором и добавьте 1. – jarlh
Хорошая практика программирования имеет два разных псевдонима таблиц. Например. f1 и f2. – jarlh
С помощью [modern SQL] (http://modern-sql.com/slides) это можно сделать намного проще с помощью простой оконной функции: 'row_number() over (порядок несущей несущей на основе id)' - нет необходимости в подзапрос. –