#sql #sqlite #subquery #where-clause
#sql #sqlite #подзапрос #where-предложение
Вопрос:
Я пытаюсь ответить на следующий запрос
напишите запрос, который показывает номер рейса (flno), отправную точку и пункт назначения для всех рейсов, где существует другой рейс, который возвращается из пункта назначения в пункт отправления.
select distinct flno, origin, destination as d from flight
where exists (select flno, destination from flight where origin = d)
Первые два ответа правильные, но это дает мне больше ответов, которые не относятся к вопросу?
Таблица выполнения:
Комментарии:
1. вы не проверяете пункт назначения рейса в
exists
предложении2. Извините, я все еще немного в замешательстве? Разве я не предполагаю, что мне нужно снова проверить назначение на источник?
3. если вы ищете рейс Детройт — Нью-Йорк, вам необходимо подтвердить, что существует рейс Нью-Йорк — Детройт. Вам нужно сопоставить пункт назначения с источником, а источник с пунктом назначения
Ответ №1:
Вам необходимо соотнести подзапрос в exists
условии с внешним запросом. Логика, которая вам представляется, кажется:
select flno, origin, destination
from flight f
where exists (
select 1
from flight f1
where f1.origin = f.destination and f1.destination = f.origin
)
Комментарии:
1. Спасибо. Хотя ответ правильный, я все еще не понимаю ваш запрос. Но я попытаюсь разобраться с этим в обратном порядке. Спасибо
Ответ №2:
Вот более простой способ решить приведенный выше запрос без использования подзапроса:
select flno, origin, destination from flight f1, flight f2
where fl.origin = f2.destination and f1.destination = f2.origin
Комментарии:
1. Спасибо вам за это, к сожалению, меня попросили использовать вспомогательный запрос.