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

김준석·2025년 3월 7일

코딩테스트 - SQL

목록 보기
96/96

문제

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

풀이

1. (a,b) (b,c) (c,a)형태의 친구 집합을 구함

2. edges 테이블은 (a,b)의 형태 {a의 친구 b}

3. edges 테이블의 user_b_id가 user_a_id에 있을때 b의 친구를 알 수 있다. {b의 친구 c}

FROM
  edges t1
  INNER JOIN edges t2
    ON t1.user_b_id = t2.user_a_id -- b의 친구 c

4. c가 user_b_id에 포함되어 있고, t1, t3 user_a_id가 같을때 c의 친구 a를 알 수 있다.

  INNER JOIN edges t3
    ON t2.user_b_id = t3.user_b_id -- c의 친구 a(t3의 user_a_id가 바로 c의친구 a이다.)
    AND t3.user_a_id = t1.user_a_id 

5. 3820인 사용자를 포함하는 친구관계 추출

WHERE 1=1
  AND 3820 IN (t1.user_a_id, t1.user_b_id, user_c_id)

전체 코드

SELECT 
  t1.user_a_id,
  t1.user_b_id,
  t2.user_b_id AS user_c_id
FROM
  edges t1
  INNER JOIN edges t2
    ON t1.user_b_id = t2.user_a_id -- b의 친구 c
  INNER JOIN edges t3
    ON t2.user_b_id = t3.user_b_id -- c의 친구 a(t3의 user_a_id가 바로 c의친구 a이다.)
    AND t3.user_a_id = t1.user_a_id 
WHERE 1=1
  AND 3820 IN (t1.user_a_id, t1.user_b_id, user_c_id)

0개의 댓글