#sql #mysql-workbench
Вопрос:
Я должен создать заявление, которое удовлетворяет следующему требованию:
Предоставьте список всех пассажиров, которые приземлились либо в аэропорту «Пальма-де-Майорка», либо в «Барселоне». Но ни в коем случае не на обоих.
с помощью этой базы данных: Flughafen-база данных
вот что я придумал:
select *
from person
join passagierliste using (personid)
join flug using (flugid)
join flughafen on flug.flughafen_destination=flughafen.flughafenid
where (flughafenid = 'Palma de Mallorca') xor (flughafenid = 'Barcelona')
;
но это приводит к следующей ошибке:
Произошла ошибка при выполнении команды SQL: выберите * из списка лиц, присоединяющихся к паролю, используя (идентификатор лица), присоединяющийся к flug, используя (flugid) , присоединяющийся к flughafen на flug.flughafen_… ORA-00933: Неправильно завершена команда SQL [Состояние SQL=42000, код ошибки БД=933]
Время выполнения: 0,03 с
1 утверждение(ы) не выполнено.
Обновить
нашел ошибку, но не ошибку (вместо flughafenid я должен был использовать bezeichnung:
select *
from person
join passagierliste using (personid)
join flug using (flugid)
join flughafen on flug.flughafen_destination=flughafen.flughafenid
where (bezeichnung = 'Palma de Mallorca') xor (bezeichnung = 'Barcelona')
;
Ответ №1:
Вы можете сгруппироваться по идентификатору лица и посчитать различные описания (bezeichnung) в группе. Из-за этого WHERE
пункта вы знаете, что выбираются только описания Майорки или Барселоны. Это означает, что если на человека приходится более 1 отдельного описания, они посетили оба. Используйте это (непроверенное) в качестве CTE или подзапроса, чтобы получить соответствующие данные из person
таблицы.
select person.personid
from person
join passagierliste using (personid)
join flug using (flugid)
join flughafen on flug.flughafen_destination=flughafen.flughafenid
where bezeichnung IN('Palma de Mallorca', 'Barcelona')
group by person.personid
having count(distinct bezeichnung) = 1
Комментарии:
1. спасибо, я включил это в подвыборку, чтобы получить всего человека