【发布时间】:2020-02-22 18:21:53
【问题描述】:
我有以下表格:
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)
);
想象一下插入到这个表中的数据是:
桌人
id_person name
-----------------------------------------------
1 Jake
2 Kevin
3 Denis
Table Journey(和 Table 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。
我必须在我想显示id_person 的地方执行SELECT,并且它是各自的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
【问题讨论】:
-
你的大学是 1991 年的吗?
-
显式
JOIN是当前 25 年以上的 ANSI-1992 SQL 标准,它长期以来取代了隐式连接,就像您在WHERE中所做的那样。请联系讲师和/或计划以调整课程,因为不教授显式联接对 SQL 学生不利。