选择使用两个列名,用另外一个如果一个人相识记录

我不完全知道如何短语这是一个简洁的问题标题。

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

我想获取来自对手的用户名 accounts表。 对手是其中的ID是不等于所述公知的用户ID的用户。 所以,如果userid1 = 123 ,然后我想获取accounts.username用户在哪里accounts.id等于userid2相同的games记录。 同样的问题也反过来想,如果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等于已知用户标识
  • games.userid1如果games.userid2等于已知用户标识

如果是这样,怎么样?

--------------解决方案-------------

您可以在连接条件,像这样使用一个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的 时间:2015-03-15 人气:0
本文关键词: MySQL和SQL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.447 (s). 10 q(s)