2013-05-28 1 views
0

Я хотел бы иметь список всех игроков в спортивной лиге, которые находятся в команде, в которой есть только один член.Получение списка записей

Вот 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 

Не знаете, как получить их группировать вверх?

+0

как formsfiles и игроки имеют рк идентификатор, который ID вы хотите получить доступ .. – sAnS

ответ

3

Если вы хотите, чтобы вернуть игроков в команде только с одним участником вы можете использовать:

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 with Demo

Edit, вы можете также использовать (перемещение от комментариев):

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

См SQL Fiddle with Demo

+0

этот делает работу очень красиво! Но у меня проблема. По какой-то причине он занимает огромное количество времени для обработки. Длительность более 5 минут на 200 000 записей. Даже когда в коде работает mySQL Workbench на том же сервере, что и база данных. Может ли построить хороший индекс помочь? – JVMX

+1

@JVMX Есть ли у вас какие-либо индексы на столе? У вас должен быть один на 'team_id' – Taryn

+0

Да, игроки. Team_ID индексируется. (Btree) – JVMX

0

Благодарности Bluefeet:

эту работу великолепно:

Я хочу разместить его здесь, в случае кто-то serches тир будущее:

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

Я добавил это к своему ответу, Я просто хотел убедиться, что скрипт sql работал на вас, прежде чем я включил это. – Taryn

Смежные вопросы