Как проверить, совпадают ли все записи в возвращаемом кортеже из вложенного запроса?

Привет, я новичок в sql, и я не могу найти хороший способ решить проблему. У меня есть следующие объекты

passengers (`id` INT, `name` VARCHAR(45), `surname` VARCHAR(45),
`year_of_birth` INT) 

flights (`id` INT, `routes_id` INT, `date` DATE, `airplanes_id` INT) 

flights_has_passengers (`flights_id` INT, `passengers_id` INT)

airplanes (`id` INT, `number` VARCHAR(45), `manufacturer`
VARCHAR(45), `model` VARCHAR(45)).

Я хочу создать скрипт, который находит имена всех пассажиров, которые сели хотя бы на один рейс, и если они сели более чем на один рейс, эти рейсы должны быть выполнены с использованием одного и того же самолета. Я попытался вернуть кортеж, содержащий самолеты, который использовал каждый из пассажиров, используя вложенный запрос. Затем я попытался использовать оператор all, чтобы проверить, является ли каждая запись в типе одинаковой. Однако мне не повезло. Любой совет будет оценен.

Обновлено: я подумал о следующем решении, но не знаю, правильно ли оно:

     select p1.name, p1.surname
    from passengers p1, airplanes a1, flights_has_passengers, flights
    where
        p1.id = flights_has_passengers.passengers_id and
        flights_has_passengers.flights_id = flights.id and
        flights.airplanes_id = a1.id
        group by p1.id
        having count(a1.id) = 1;
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОБНОВЛЕНИЕ: основываясь на комментарии OP к ответу, вот еще один способ использования НЕ СУЩЕСТВУЕТ

Hey thanks for your answer.Is there another way to implement this without a join statement ?For example something like not exists or all ?

select p.id
from passengers p 
join flights_has_passengers  fp 
  on p.id= fp.passengers_id
join flights f
  on f.id=fp.flights_id
 where not exists 
 (select 1 from join flights f1 
 where f1.id=f.id
 and f1.airplanes_id<>f.airplanes_id)

Возможно, используйте JOIN, как показано ниже.

select p.id
from passengers p 
join flights_has_passengers  fp 
  on p.id= fp.passengers_id
join flights f
  on f.id=fp.flights_id
group by p.id
having count(f.airplanes_id)=1

Обратите внимание: если вас интересует только идентификатор пассажира, вам даже не нужно присоединяться к таблице пассажиров.

Chris Maurer 22.04.2022 21:55

@ChrisMaurer правильно, я добавил это на всякий случай.

DhruvJoshi 22.04.2022 21:57

@DhruvJoshi Эй, спасибо за ваш ответ. Есть ли другой способ реализовать это без оператора соединения? Например, что-то вроде не существует или все?

AlexandrosS 24.04.2022 18:33

Ответ @AlexandrosS обновлен

DhruvJoshi 25.04.2022 07:51

Другие вопросы по теме