Существующая функция

#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. Спасибо вам за это, к сожалению, меня попросили использовать вспомогательный запрос.