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

标签 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'

我相当有信心我的逻辑是正确的,但我很花时间查找有关适用于我的情况的语法的任何信息。如果有人能帮助我,我真的很感激,我已经为此挠头好几个小时了。预先感谢:)

最佳答案

您需要复制整个表达式:

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

关于mysql - 尝试使用 CASE 的结果作为 Inner Join 的标准,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198181/

相关文章:

c# - 如何在关系或预取上执行联接或放置 where 子句? (LLBLGen)

Yii2:定义多个表之间关系的正确方法是什么?

php - 获取数组时出错 - CRUD PHP/MYSQL

java - 如何解决此错误{无法启动组件[Connector[HTTP/1.1-8080]]}?

mysql - 更新洋红色时,core_file_storage 中的 UNQ_CORE_FILE_STORAGE_FILENAME_DIRECTORY_ID 键重复条目

mysql - 从 MySQL 移动到 SQL Server 后显示的错误

未找到键 id 时 MySQL 不返回结果

mysql - INSERT INTO...ON DUPLICATE KEY UPDATE 增量语法

PHP foreach 和之后的 while 循环

php - 同一张表上的相关项目