У меня есть следующие таблицы:
create table Person (
id_person int,
name varchar(255),
primary key (id_person)
);
create table Journey (
id_journey int,
year int,
country varchar(255),
primary key (id_journey),
);
create table Person_Journey (
id_journey int references Journey (id_journey),
id_person int references Person (id_person),
primary key (id_journey, id_travel)
);
Представьте, что данные, вставленные в эти таблицы:
Таблица Person
id_person name
-----------------------------------------------
1 Jake
2 Kevin
3 Denis
Table Journey (и таблица Person_Journey ):
id_person id_travel country
---------------------------------------------------
1 1 France
1 2 Germany
1 3 Portugal
2 4 UK
2 5 Germany
2 6 UK
3 7 UK
3 8 Portugal
3 9 Germany
Как показывает предыдущий пример, человек с id_person = 1
путешествовал по Portugal
, Germany
и France
. Человек с id_person = 2
путешествовал к UK
два раза и к Germany
. Наконец, человек с id_person = 3
отправился на UK
, Germany
и Portugal
.
Я должен выполнить SELECT
там, где я хочу показать id_person
и его соответствующие name
ТОЛЬКО от людей, которые путешествовали на UK
И Germany
.
Итак, я хочу получить вывод:
id_person name
------------------------------
2 Kevin
Я пытался выполнить это без успех:
select P.* from Person as P, Journey as J, Person_Journey as PJ
where P.id_person = PJ.id_person and J.id_journey = PJ.id_journey
and J.country in ("UK", "Germany")
group by (P.id_person)
having count(J.country) = 2;
Как я могу это сделать? Я использую MySQL