MySQL棘手的双/三连接(?)

lol*_*ter 2 mysql sql database join social-networking

表结构:

    users: uid, name
    friendships: uid1, uid2
    game_membership: gid, uid
Run Code Online (Sandbox Code Playgroud)

基本上我正在尝试将查询作为函数gid,并返回:

uid1, name1, uid2, name2
Run Code Online (Sandbox Code Playgroud)

只返回给定表中的uid's' .这是我到目前为止所得到的:game_membershipgid

SELECT 
   f.uid1 AS id1, 
   u1.name AS name1, 
   f.uid2 AS id2, 
   u2.name AS name2
FROM 
   friendships AS f
WHERE 
   u1.uid in (SELECT uid FROM game_membership WHERE gid = <GID>)
   AND u2.uid in (SELECT uid FROM game_membership WHERE gid = <GID>)
JOIN users AS u1 ON f.uid1 = u1.uid
JOIN users AS u2 ON f.uid2 = u2.uid
Run Code Online (Sandbox Code Playgroud)

我现在刚收到MySQL语法错误.谁能指出我正确的方向?我觉得我可能要uidgame_membership桌子上再做一两个JOIN ,每个一个uid

Pau*_*haw 9

我建议你加入Game_membership表而不是where子句:

SELECT 
   f.uid1 AS id1, 
   u1.name AS name1, 
   f.uid2 AS id2, 
   u2.name AS name2
FROM 
   friendships AS f
JOIN game_membership AS user1_gm ON user1_gm.uid = f.uid1
JOIN game_membership AS user2_gm ON user2_gm.uid = f.uid2
JOIN users AS u1 ON f.uid1 = u1.uid
JOIN users AS u2 ON f.uid2 = u2.uid
WHERE user1_gm.gid = <GID> AND user2_gm.gid = <GID>
Run Code Online (Sandbox Code Playgroud)