苦苦挣扎的SQL查询加入

时间:2015-12-09 15:09:22

标签: mysql

我正在努力在mysql中编写查询连接

我有两张桌子

挑战

challenge_ID(int) |to_user(int)|from_user(int)|timestamp|gameID=>nullable

用户

iduser(int)|first_name(string)

当我有challengeID

时,我想获得to_user和form_user的名字

例如

挑战

challenge_ID(int) |to_user(int)|from_user(int)|timestamp|gameID
  1                9            10              sometimestamp

用户

   iduser(int)|first_name(string)
   9             Tom
   10            Chris
   11            Patrick

我想让'Tom'和'Chris'获得挑战ID 1

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

可能是这样的:

SELECT first_name
FROM Users 
WHERE iduser IN (SELECT to_user
               FROM challenges
               WHERE Challenge_Id = 1
              UNION
               SELECT from_user
               FROM challenges
               WHERE Challenge_Id = 1)

答案 1 :(得分:0)

这就是你这样做的方式

select c.* ,u.first_name as to_name , u2.first_name as from_name 
FROM challenges c 
join users u on c.to_user = u.id
join users u2 on c.from_user = u2.id
where c.challenge_ID = 1

答案 2 :(得分:0)

看起来你需要一个UNION然后一个JOIN:

SELECT users.first_name
FROM (
  SELECT from_user AS usr FROM challenges WHERE challenge_id=1
  UNION
  SELECT to_user FROM challenges WHERE challenge_id=1
) u INNER JOIN users ON u.usr = users.id_user

UNION将删除子查询上的重复项,如果没有重复项,则可以使用更快的UNION ALL。

答案 3 :(得分:0)

您可以尝试此查询

SELECT u_to.first_name, u_from.first_name
FROM challenges c
INNER JOIN users u_to ON u_to.iduser = c.to_user
INNER JOIN users u_from ON u_from.iduser = c.from_user
WHERE c.challange_ID = 1