Mysql 如何创建查询以查找是否有团队未获胜

Mysql 如何创建查询以查找是否有团队未获胜,mysql,sql,Mysql,Sql,我需要创建一个查询,以确定是否有一支球队尚未赢得一场比赛。我的结果集应该包括所有球队,无论比赛中是否有比赛。在我的输出中,我应该包括球队id、球队名称、比赛id和比赛日期。我怎样才能做到这一点。我试过不同的方法,但都错了。谢谢 这是我的团队表: CREATE TABLE team( teamID integer, teamName char(15) --constraints CONSTRAINT teamID_pk primary key(teamID) );

我需要创建一个查询,以确定是否有一支球队尚未赢得一场比赛。我的结果集应该包括所有球队,无论比赛中是否有比赛。在我的输出中,我应该包括球队id、球队名称、比赛id和比赛日期。我怎样才能做到这一点。我试过不同的方法,但都错了。谢谢 这是我的团队表:

CREATE TABLE team(
teamID          integer,
teamName        char(15)
--constraints
CONSTRAINT teamID_pk primary key(teamID)
);

INSERT INTO team
    (teamID,teamName)
    VALUES
    (101, 'Purple Pilots'),
    (102, 'Red Devils'),
    (103, 'Silver Lions'),
    (104, 'Blue Jackets'),
    (105, 'Green Hornets'),
    (106, 'Gold Dragons'),
    (100, 'No Winner')
;
这是我的游戏桌:

CREATE TABLE game(
gameID          integer,
gameDate        DATE,  
gameTime        TIME,
home_team       integer     not null,
visitor_team    integer     not null, 
winning_team    integer     not null default 100, 
refID           integer     not null,
locationID      integer     not null, 
score           char(10),

constraint gameID_pk primary key(gameID),
CONSTRAINT hometeam_fk foreign key(home_team) REFERENCES team(teamID),
constraint visitorteam_fk foreign key(visitor_team) references team(teamID),
CoNSTRAINT winningteam_fk foreign key(winning_team) REFERENCES team(teamID),
CONSTRAINT refID_fk foreign key(refID) REFERENCES person(personID),
CONSTRAINT locationID_fk foreign key(locationID) references location(locationID)
);

INSERT INTO game
     (gameID, gameDate, gameTime, home_team, visitor_team, winning_team, refID, locationID, score)
    VALUES
     (10012, '8/23/2012', '6:00 PM', 101, 105, 105, 160, 2, '21 - 10'), 
     (10013, '8/23/2012', '6:00 PM', 102, 106, 102, 161, 1, '14 - 0'),
     (10014, '8/23/2012', '6:00 PM', 104 ,103, 104, 162, 3, '24 - 3'),
     (10015, '8/30/2012', '6:00 PM', 105, 102, 105, 161, 1, '17 - 14'),
     (10000, '8/30/2012', '6:00 PM', 106, 104, 106, 162, 2, '14 - 3'), 
     (10001, '8/30/2012', '6:00 PM', 103, 101, 103, 161, 3, '10 - 7'), 
     (10002, '9/6/2012', '6:00 PM', 102, 106, 102, 162, 2, '27 - 14'),
     (10003, '9/6/2012', '6:00 PM', 104, 103, 104, 161, 3, '14 - 7'),
     (10004, '9/6/2012', '6:00 PM', 101, 105, 101, 160, 1, '27 - 7'), 
     (10005, '9/13/2012', '6:00 PM', 106, 104, 106, 162, 1, '14 - 7'), 
     (10006, '9/13/2012', '6:00 PM', 103, 101, 103, 160, 2, '21 - 7'),
     (10007, '9/13/2012', '6:00 PM', 105, 102, 105, 161, 3, '21 - 20')
;
这就是我在这项任务中所做的:

select teamID, teamName, gameID, gameDate, winning_team
from team t join game g
     on t.teamID != g.winning_team
intersect
select teamID, teamName, gameID, gameDate, winning_team
from team t join game g
     on t.teamID != g.winning_team
where teamID >= 100
order by gameID  


teamID teamName gameID gameDate 
----------- --------------- ----------- ---------- 
 100 No Winner NULL NULL 
 106 Gold Dragons 10000 2012-08-30 
 103 Silver Lions 10001 2012-08-30 
 102 Red Devils 10002 2012-09-06 
 104 Blue Jackets 10003 2012-09-06 
 101 Purple Pilots 10004 2012-09-06 
 106 Gold Dragons 10005 2012-09-13 
 103 Silver Lions 10006 2012-09-13 
 105 Green Hornets 10007 2012-09-13 
 105 Green Hornets 10012 2012-08-23 
 102 Red Devils 10013 2012-08-23 
 104 Blue Jackets 10014 2012-08-23 
 105 Green Hornets 10015 2012-08-30 

以下查询可能适用于您的需求。它选择尚未赢得任何比赛的球队。对于这些团队,列出了所有游戏

select t.teamID, t.teamName, g.gameID, g.gameDate, g.winning_team
from team t left outer join
(select distinct winning_team from game) winners
on t.teamID = winners.winning_team
left outer join game g
on t.teamID = g.home_team or t.teamID = g.visitor_team
where winners.winning_team is null

这是一个显示排名的简单解决方案

select t.teamName,count(g.gameId) as TotalWins
from team t
left join game g on t.teamId = g.winning_team
group by g.winning_team,t.teamName
having count(g.gameId) = 0            -- This line shows teams with no wins only
order by 2 desc
如果团队从未玩过游戏,则使用空游戏值显示游戏详细信息

select distinct xx.teamId,xx.TeamName,xx.totalWins,g.gameId,g.gameDate,g.score
from (
    select t.teamId,t.teamName,count(g.gameId) as TotalWins
    from team t
        left join game g on t.teamId = g.winning_team
        group by g.winning_team,t.teamName
    ) xx  
 left join game g on xx.teamid=g.home_team or xx.teamid=g.visitor_team
 order by TotalWins desc,teamId,gameId

你能根据给定的数据给出预期的输出吗?小建议,因为我为一家足球俱乐部设计了类似的东西。将分数分成两列,你需要计算排名,通常分数差或得分是排名的第一位。还有,你们的系统允许打领带吗?谢谢。你告诉我怎么做。