【发布时间】:2021-10-24 05:51:49
【问题描述】:
一支足球队有 1 名或多名球员。一名球员属于 1 个或多个足球队。我有一个球员名单:'Bob', 'James', 'Sam' 我想知道哪支球队有这些球员。所以结果将是Red Team,因为Red Team 是唯一一个拥有完全'Bob', 'James', 'Sam' 的团队。请保留我所有的连接。我知道从技术上讲,您可以在 members 表中完成所有操作,但为了简单起见,我只是这样构建它。
CREATE TABLE teams(
name VARCHAR(25) PRIMARY KEY
);
CREATE TABLE players(
name VARCHAR(25) PRIMARY KEY
);
CREATE TABLE members(
team_name VARCHAR(25) NOT NULL,
player_name VARCHAR(25) NOT NULL,
CONSTRAINT FK_team_name FOREIGN KEY (team_name) REFERENCES teams(name),
CONSTRAINT FK_player_name FOREIGN KEY (player_name) REFERENCES players(name)
);
INSERT INTO teams(name) VALUES ('Blue Team');
INSERT INTO teams(name) VALUES ('Red Team');
INSERT INTO teams(name) VALUES ('Green Team');
INSERT INTO teams(name) VALUES ('Purple Team');
INSERT INTO players(name) VALUES ('Bob');
INSERT INTO players(name) VALUES ('Sarah');
INSERT INTO players(name) VALUES ('James');
INSERT INTO players(name) VALUES ('Mike');
INSERT INTO players(name) VALUES ('Sam');
INSERT INTO members(team_name, player_name) VALUES ('Blue Team', 'Bob');
INSERT INTO members(team_name, player_name) VALUES ('Green Team', 'Bob');
INSERT INTO members(team_name, player_name) VALUES ('Green Team', 'Sam');
INSERT INTO members(team_name, player_name) VALUES ('Green Team', 'James');
INSERT INTO members(team_name, player_name) VALUES ('Green Team', 'Sarah');
INSERT INTO members(team_name, player_name) VALUES ('Red Team', 'Bob');
INSERT INTO members(team_name, player_name) VALUES ('Red Team', 'Sam');
INSERT INTO members(team_name, player_name) VALUES ('Red Team', 'James');
INSERT INTO members(team_name, player_name) VALUES ('Purple Team', 'Mike');
INSERT INTO members(team_name, player_name) VALUES ('Purple Team', 'Sam');
我的 SQL 语句:
SELECT DISTINCT
t.name
FROM teams t
LEFT JOIN members m
ON t.name = m.team_name
LEFT JOIN players p
ON m.player_name = p.name
WHERE
m.player_name in ('Bob', 'James', 'Sam')
【问题讨论】: