我有一个结构类似于美国职业棒球大联盟的 SQL 数据库。它有一个美国联盟和国家联盟,其中包含分区,包含球队,有赢/输记录并包含球员。
我的联赛表有:|league_name|league_id(主键)|外卡|
其中外卡是一个外键团队 ID,它是一个部门中最好的团队,但不领导该部门。
这是我在更新我的 Z_TEAMS 表(保存赢/输记录的地方)时更新通配符的触发器:
UPDATE Z_LEAGUES
SET `Z_LEAGUES`.`Wild Card` = (SELECT teamID
FROM Z_TEAMS
WHERE (teamWins/teamLoss) =
(SELECT MAX(teamWins/teamLoss) FROM Z_TEAMS,
Z_DIVISIONS WHERE Z_TEAMS.divID =
Z_DIVISIONS.divID AND Z_DIVISIONS.leagueID =
Z_LEAGUES.leagueID AND Z_TEAMS.teamID != Z_DIVISIONS.divLeader))
它通常运行良好,每次更新 Z_TEAMS 时都会选择正确的团队。但是,如果我尝试更新 Z_TEAMS 以使 2 个团队拥有相同的记录并且都是外卡的候选者,则触发器会返回多行并限制更新。
我的问题是:我怎样才能打破这种平局?我愿意在外卡位置展示两支球队,或者任意挑选一支,或者按字母顺序挑选。我是 SQL 的新手,无法弄清楚这一点。
最佳答案
UPDATE Z_LEAGUES
SET `Z_LEAGUES`.`Wild Card` =
(SELECT teamID
FROM Z_TEAMS
WHERE (teamWins/teamLoss) =
(SELECT MAX(teamWins/teamLoss)
FROM Z_TEAMS, Z_DIVISIONS
WHERE Z_TEAMS.divID = Z_DIVISIONS.divID
AND Z_DIVISIONS.leagueID = Z_LEAGUES.leagueID
AND Z_TEAMS.teamID != Z_DIVISIONS.divLeader)
ORDER BY teamID
Limit 1)
将最后两行添加到您的基本查询中。
Limit 将限制输出行,而 order by 将对它们进行排序以预测将选择哪一行。
您可以使用order by teamID desc
来反向排序。
关于mysql - SQL:打破平局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899694/