【问题标题】:MySQL select inner join and unionMySQL选择内连接和联合
【发布时间】:2013-01-20 12:45:54
【问题描述】:

我有这两张桌子。我有当前玩家 id_player,我想从该玩家 (id_player) 和他的对手信息中选择所有游戏。当前玩家和对手玩家连接到相同的 id_game。或

table game:`id_game` (...)
table game_player:`id_game_player, id_player, id_game`(...)

“给我所有与当前玩家和他的对手不同的游戏信息 并加入他们游戏的信息(按游戏分组)”

结果为:

      +---player game info
game1 |
      +---opponent game info

      +---player game info
game2 |
      +---opponent1 game info

      +---player game info
game2 |
      +---opponent2 game info

谁能提供我的 MySQL 解决方案?

谢谢


编辑: 我尝试使用这段代码,但我不确定这是最快的方式(在哪里),有没有办法像上面那样对结果进行分组?

SELECT * FROM game_player
    JOIN `game` ON game.id_game = game_player.id_game
    WHERE game_player.id_game
    IN (
    SELECT game_player.id_game
    FROM `game_player`
    WHERE game_player.id_player =2)

【问题讨论】:

  • 游戏信息在哪里?
  • “游戏信息”表示表中的所有其他字段 *
  • 问题措辞“给我所有单独的游戏信息...” 使这听起来很像作业问题。你能发布你到目前为止的努力吗?
  • 我只看到一个player_id 每场比赛的另一个对手 player_id 在哪里?
  • 对手player_id是其他同id_game的玩家

标签: mysql sql union inner-join


【解决方案1】:

试试看

SET @player_ID = 0;                  -- <<== the playerID
SELECT  a.*, b.*, 'player' Status         -- this is the first part of the union
FROM    game a                            -- which gets all the game of
        INNER JOIN game_player b          -- the selected player and its info
            ON a.id_game = b.id_game
WHERE   id_player = @player_ID 
UNION ALL
SELECT  d.*, c.*, 'opponent' status
FROM    game_player c
        INNER JOIN
        (
            SELECT  a.*
            FROM    game aa
                    INNER JOIN game_player bb
                        ON aa.id_game = bb.id_game
            WHERE   bb.id_player = @player_ID
        ) d ON c.id_game = d.id_game AND c.id_player <> @player_ID
ORDER   BY id_game, status

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2021-08-13
    • 2013-01-22
    相关资源
    最近更新 更多