一尘不染

使用多对多表MySQL进行过滤

sql

我有以下表格(为简单起见,省略了其他表格)。1适用于所有人,2适用于这些人从事的运动。我正在使用php允许用户查看人员列表。他们可以按人的名字或参加的体育活动进行过滤。因此,我希望能够看到所有参加比赛的人,例如棒球和足球。

create table people (
  id int,
  name varchar(50)
  );

create table people_to_sports (
  personID int,
  sportID int,
  primary key(personID,sportID)
  );

基本上,我的问题是,如何使用people_to_sports获得所有参加运动1和运动2的人的列表?

在这里有一个sqlfiddle 。

谢谢!


阅读 206

收藏
2021-03-08

共1个答案

一尘不染

SELECT
  personID
FROM
  people_to_sports
WHERE
  sportID IN (1, 2)
GROUP BY
  personID
HAVING
  COUNT(*) = 2
2021-03-08