尝试使用CASE的结果作为Inner Join的标准,我做错了什么?

时间:2012-04-17 19:53:21

标签: mysql inner-join

我正在开发一个项目,我需要根据给定行的内容对两列中的一列进行表连接。基本上,给定一个特定的用户名,我想获得他们正在玩的所有游戏中所有对手的信息。我在这里使用的两个表是GameSession和Users。 GameSession为每个玩家(Player1和Player2)都有一列,它们是Users表列Username中的外键,其中还包含Rank列。这是我的选择陈述:

SELECT CASE WHEN GameSession.Player1 = 'BOB' THEN GameSession.Player2
            ELSE GameSession.Player1
            END AS Opponent, Users.Rank 
FROM GameSession
            INNER JOIN Users
            ON Users.Username=Opponent
WHERE GameSession.Player1 = 'BOB' OR GameSession.Player2 = 'BOB'

我在这里使用BOB作为一次性值。

我通过phpMyAdmin获取的SQL错误,我正在进行测试的地方如下:

#1054 - Unknown column 'Opponent' in 'on clause'

我非常有信心我的逻辑正确,但我很有时间找到有关适用于我的情况的语法的任何信息。如果有人能帮我一把,我真的很感激,我一直在摸着头几个小时。在此先感谢:)

1 个答案:

答案 0 :(得分:2)

您需要复制整个表达式:

FROM GameSession
        INNER JOIN Users
        ON Users.Username=
            CASE WHEN GameSession.Player1 = 'BOB' THEN GameSession.Player2
            ELSE GameSession.Player1
            END