본문 바로가기
MySql

MySQL 까다로운 이중 / 삼중 JOIN (?)

by 베이스 공부 2021. 2. 14.
반응형

테이블 구조 :

    users: uid, name
    friendships: uid1, uid2
    game_membership: gid, uid

기본적으로 gid 의 함수로 쿼리를 가져오고 다음을 반환하려고합니다.

uid1, name1, uid2, name2

여기서 주어진 gid 아래의 game_membership 테이블에있는 uid 만 반환됩니다. 이것이 내가 지금까지 얻은 것입니다.

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

지금 바로 MySQL 구문 오류가 발생합니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? game_membership 테이블의 uid 에서 각 uid 에 대해 하나씩 추가 JOIN 또는 두 번을 수행해야 할 것 같습니다.

 

해결 방법

 

where 절 대신 Game_membership 테이블에 조인하는 것이 좋습니다.

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>

 

참조 페이지 https://stackoverflow.com/questions/10166289

 

 

반응형

댓글