【问题标题】:Selecting all rows related rows when row contains user当行包含用户时选择所有行相关的行
【发布时间】:2022-01-20 00:28:44
【问题描述】:

假设我有以下简单布局(这是我所拥有的简化版本,实际上我正在使用 TypeORM 来实现这一点);

user(id, name)
game(id, name)
players(id, userId, gameId)

现在我想检索用户参与的所有gamesplayers

以下查询将获取游戏中的所有玩家;

SELECT g.id, p.* FROM games g JOIN players p ON g.id = p.gameId

现在我想通过仅选择特定用户参与的所有gamesplayers 来过滤它。我所做的是以下内容;

SELECT g.id, p.* FROM games g JOIN players p ON g.id = p.gameId WHERE p.userId = :userId

现在这显然返回了播放器的所有行。但是我怎么也能得到:userId参与的其他玩家呢?这似乎是一件很容易的事情,但我无法真正理解它。

【问题讨论】:

    标签: mysql sql typeorm


    【解决方案1】:

    您可以尝试加入players 表两次和games 表一次:

    SET @userid := 1;
    
    SELECT g.id, p1.*
    FROM players p1
     JOIN players p2
       ON p1.gameId=p2.gameId
     JOIN games g 
       ON p1.gameId=g.id
    WHERE p1.userId= @userId;
    

    Demo fiddle

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2021-11-21
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      相关资源
      最近更新 更多