我有两个具有多对多关系的表(player和group)和一个连接表(player\u group):
表“播放器”
表“组”
以及连接表:
表“玩家组”
一个玩家可以是许多组的一部分,一个组可以有许多玩家。用户也可以是组的管理员,由标志“flg\u admin”表示。
我想构建一个查询来告诉我,对于一个特定的玩家(假设player1的id=27):
玩家所属组的名称;
玩家所属的每个组中的玩家数量;
如果玩家是每组的管理员。
因此对于player1(id=27),结果是:
|group_name|no. members|flg_admin|
----------------------------------
|GROUP A | 2 | 1|
|GROUP B | 3 | 0|
我尝试了以下方法:
SELECT g.name, COUNT(x.id_player) as num_players, x.flg_admin
FROM player_group x
JOIN group g ON x.id_group=g.id
WHERE id_group IN (
SELECT
id_group
FROM player_group
WHERE id_player=27)
GROUP BY id_group;
但是,通过此查询,我得到以下结果:
|group_name|no. members|flg_admin|
----------------------------------
|GROUP A | 2 | 1|
|GROUP B | 3 | 1|
flgèu admin对于b组被设置为1,但是正如你在上面的图片中看到的,这个播放器不是b组的管理员。我一直试图得到这个权利几个小时没有用,我已经用尽了我的选择,任何帮助与此查询将不胜感激。
3条答案
按热度按时间toe950271#
x.flg_admin
不是从所选玩家的表行中获取,而是来自组中的任意行。你需要加入
player_group
表两次,以便可以从正确的行中获取此列。演示
顺便说一句,你不应该使用
group
作为表名或列名,因为它是保留关键字。o75abkj42#
我使用子查询的替代解决方案:
x9ybnkn63#
比如:
也许 吧。