본문 바로가기
SQL

[solvesql - day 24] 세 명이 서로 친구인 관계 찾기

by 우솨 2025. 1. 11.

https://solvesql.com/problems/friend-group-of-3/

 

https://solvesql.com/problems/friend-group-of-3/

 

solvesql.com

-- 주어진 사용자(3820)와 관련된 사용자 간의 친구 관계를 추적하는 쿼리
-- 세 개의 'edges' 테이블을 이용하여 A, B, C 사용자 간의 관계를 연결

SELECT 
    A.user_a_id AS user_a_id,  -- 사용자 A의 ID (친구 관계의 첫 번째 사용자)
    B.user_a_id AS user_b_id,  -- 사용자 B의 ID (친구 관계의 두 번째 사용자)
    B.user_b_id AS user_c_id   -- 사용자 C의 ID (친구 관계의 세 번째 사용자)
FROM edges AS A  -- 첫 번째 'edges' 테이블 (A와 B 관계)
JOIN edges AS B  -- 두 번째 'edges' 테이블 (B와 C 관계)
    ON A.user_b_id = B.user_a_id  -- A의 'user_b_id'가 B의 'user_a_id'와 일치하는 경우 (친구 관계 연결)
JOIN edges AS C  -- 세 번째 'edges' 테이블 (A와 C 관계)
    ON A.user_a_id = C.user_a_id  -- A의 'user_a_id'와 C의 'user_a_id'가 일치하는 경우
    AND B.user_b_id = C.user_b_id  -- B의 'user_b_id'와 C의 'user_b_id'가 일치하는 경우
WHERE 
    A.user_a_id = 3820  -- 사용자 A가 3820인 경우
    OR B.user_a_id = 3820  -- 사용자 B가 3820인 경우
    OR B.user_b_id = 3820  -- 사용자 B의 친구가 3820인 경우