gpt4 book ai didi

mysql - 使用两个列名进行选择,如果每条记录已知一个,则使用另一个

转载 作者:行者123 更新时间:2023-11-29 02:33:47 24 4
gpt4 key购买 nike

我不太确定如何将其表述为一个简洁的问题标题。

我有一个 games 表,其中包含代表玩家对战其他游戏的记录。此表的相关列是 userid1userid2。我有另一个名为 accounts 的表,由列 idusername 组成。

我想从 accounts 表中获取对手的用户名。对手是id不等于已知用户id的用户。因此,如果 userid1 = 123 那么我想获取用户的 accounts.username,其中 accounts.id 等于 同一 games 记录的 userid2。如果 userid2 = 123,反之亦然。

到目前为止,我只能使用两个查询分别选择对手的用户名:

SELECT * FROM games, accounts
WHERE games.userid1 = 123 AND accounts.id = games.userid2

和:

SELECT * FROM games, accounts
WHERE games.userid2 = 123 AND accounts.id = games.userid1
(swapped: ^ ^)

不过,我想将这两个查询很好地合二为一。那么,是否有可能获得 accounts.username 其中 accounts.id 等于:

  • games.userid2 如果 games.userid1 等于已知用户 id
  • games.userid1 如果 games.userid2 等于已知用户 id

如果是,怎么办?

最佳答案

您可以在连接条件中使用 case 语句,如下所示:

SELECT * FROM games g
JOIN accounts a
ON a.id = case g.userid1 when ? then g.userid2 else g.userid1 end
WHERE
g.userid1 = ? OR g.userid2 = ?

但是,根据您的索引,使用联合可能会更快,例如。

  SELECT * FROM games g
JOIN accounts a ON a.id = case g.userid2
WHERE g.userid1 = ?
UNION ALL
SELECT * FROM games g
JOIN accounts a ON a.id = case g.userid1
WHERE g.userid2 = ?

使用 OR 的替代查询,

SELECT * FROM games g, accounts a 
WHERE
(g.userid1 = ? AND g.userid2 = a.id)
OR (g.userid2 = ? AND g.userid1 = a.id)

关于mysql - 使用两个列名进行选择,如果每条记录已知一个,则使用另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com