Mysql 获取记录列表,这些记录是谁';s

Mysql 获取记录列表,这些记录是谁';s,mysql,Mysql,我想要一份体育联盟中只有一名成员的球队的所有球员名单 以下是sql: CREATE TABLE `formsfiles`.`Teams` ( `ID` INT NOT NULL AUTO_INCREMENT , `Name` VARCHAR(45) NULL , PRIMARY KEY (`ID`) ); INSERT INTO `Teams` (`Name`) VALUES ('Sharks'); INSERT INTO `Teams` (`Name`) VALUES ('J

我想要一份体育联盟中只有一名成员的球队的所有球员名单

以下是sql:

CREATE  TABLE `formsfiles`.`Teams` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Name` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) );


INSERT INTO `Teams` (`Name`) VALUES ('Sharks');
INSERT INTO `Teams` (`Name`) VALUES ('Jets');
INSERT INTO `Teams` (`Name`) VALUES ('Fish');
INSERT INTO `Teams` (`Name`) VALUES ('Dodgers');
INSERT INTO `Teams` (`Name`) VALUES ('Pigs');

CREATE  TABLE `Players` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Name` VARCHAR(45) NULL ,
  `Team_ID` INT NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Jim', '1');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Tom', '1');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Harry', '2');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Dave', '2');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Tim', '3');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Trey', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Jay', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Steve', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Ziggy', '5');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Chris', '4');
结果应该给我:

ID         Name
5          Tim
9          Ziggy

不确定如何将他们分组?

如果您想让队员回到只有一名队员的队伍中,您可以使用:

select p.id, p.name
from players p
where p.Team_ID in (select Team_ID
                    from players p
                    group by Team_ID
                    having count(Team_ID) = 1);

编辑,也可以使用(从注释移动):


如果您想让一个只有一名成员的团队中的球员返回,请参见:

select p.id, p.name
from players p
where p.Team_ID in (select Team_ID
                    from players p
                    group by Team_ID
                    having count(Team_ID) = 1);

编辑,也可以使用(从注释移动):

请参见

谢谢蓝脚:

这项工作非常出色:

我想把它贴在这里,以防将来有人把它贴在这里:

select max(id) id, max(name) name
from players 
group by team_id
having count(team_id) = 1;
谢谢蓝脚:

这项工作非常出色:

我想把它贴在这里,以防将来有人把它贴在这里:

select max(id) id, max(name) name
from players 
group by team_id
having count(team_id) = 1;

表单文件和玩家都有pk ID,你想访问哪个ID。表单文件和玩家都有pk ID,你想访问哪个ID。这项工作做得很好!但我有个问题。由于某种原因,它需要大量的时间来处理。200000条记录的持续时间远远超过5分钟。即使代码在与数据库相同的服务器上运行mySQL Workbench。构建一个好的索引会有帮助吗?@JVMX表上有索引吗?您应该在
team\u id
Yes players.team\u id上有一个。(Btree)@JVMX您可以尝试以下方法之一,看看它们是否表现得更好--请看这个演示--这项工作做得非常好!但我有个问题。由于某种原因,它需要大量的时间来处理。200000条记录的持续时间远远超过5分钟。即使代码在与数据库相同的服务器上运行mySQL Workbench。构建一个好的索引会有帮助吗?@JVMX表上有索引吗?您应该在
team\u id
Yes players.team\u id上有一个。(Btree)@JVMX您可以尝试以下方法之一,看看它们是否表现得更好--看这个演示--我在我的答案中添加了这个,我只是想在我包含这个之前确保sql fiddle对您有效。我在我的答案中添加了这个,我只是想在我包含这个之前确保sql fiddle对您有效。