【发布时间】:2013-06-02 23:48:11
【问题描述】:
在这种情况下,我有 3 个表:Teams、Players 和 PlayersInTeams。
Player 只是一个注册用户。没有 W/L 数据与 Player 关联。
Team 维护赢/输记录。如果一个玩家自己玩,那么他会和他的“单人”团队一起玩(Team,里面只有那个玩家)。每次 Bob 和 Jan 一起获胜时,他们的 Team 条目就会获得 win++。每次 Jason 和 Tommy 一起输球时,他们的参赛队伍都会输球++。
PlayersInTeams表只有2列,是Players和Teams的交集表:
> desc PlayersInTeams ;
+------------+---------+
| Field | Type |
+------------+---------+
| fkPlayerId | int(11) |
| fkTeamId | int(11) |
+------------+---------+
所以这是困难的部分:
因为Player 可以是多个Teams 的一部分,所以在匹配开始时从Teams 表中获取正确的TeamId 很重要。
玩家的 SOLO 团队由
select fkTeamId from PlayersInTeams where
fkPlayerId=1 HAVING count(fkTeamId)=1;
不,不是!!但我不明白为什么。
我想说:
从 PlayersInTeams 获取 fkTeamId
fkPlayerId=1,还有行数
有这个特定的 fkTeamId 正好是 1。
查询返回(空集),实际上如果我将 HAVING 子句更改为不正确的(HAVING count(fkTeamId)<>1;),它会返回我想要的行。
【问题讨论】:
-
这不是HAVING子句的正确用法,它是在使用GROUPBY时使用的:w3schools.com/sql/sql_having.asp
-
@Ron.B.I MySQL 接受
HAVING而不接受GROUP BY,因此原始查询有效。 -
我使用正确这个词是有原因的 [=