0

メンバーが 1 人しかいないチームに所属するスポーツ リーグのすべてのプレーヤーのリストを取得したいと考えています。

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

それらをグループ化する方法がわかりませんか?

4

2 に答える 2

3

メンバーが 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);

デモで SQL Fiddle を参照してください

編集、使用することもできます(コメントから移動):

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

デモで SQL Fiddle を参照してください

于 2013-05-28T17:30:34.723 に答える
0

ありがとうブルーフィート:

この作品は素晴らしく:

将来誰かが検索した場合に備えて、ここに投稿したいと思います。

select max(id) id, max(name) name
from players 
group by team_id
having count(team_id) = 1;
于 2013-05-28T21:10:01.180 に答える