Gyuseok
Dreaming_developer
Gyuseok
  • 분류 전체보기 (39)
    • Note (0)
    • TIL (8)
    • 일상 (1)
    • git & git hub (1)
    • Algorithm (14)
    • JAVA (5)
    • Spring & SpringBoot (10)
    • 기업연계 프로젝트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리자
  • 티스토리
  • 글작성

공지사항

인기 글

태그

  • MegabyteSchool
  • java
  • Builder
  • 패스트캠퍼스
  • 내일배움카드
  • 개발자취업부트캠프
  • 메가바이트스쿨
  • pattern
  • 국비지원교육
  • lombok

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Gyuseok

Dreaming_developer

Spring & SpringBoot

HashTag 검색 SQL 구현해보기

2023. 1. 27. 13:54

커뮤니티 기능을 만들어 보면서 커뮤니티를 제작&검색 할때 HashTag를 활용해 보기로 했다.

데이터 베이스는 아래와 같다.

커뮤니티를 만들때 해쉬테그를 만들거나 등록하고, 검색할수 있는 SQL을 구현해보았다.

cm table
ht table
tr table

처음엔 아래와 같이 짜 보았다.

SELECT c.*,
       Group_concat(h.ht_name)
FROM   cm c,
       ht h
WHERE  c.c_key = ANY (SELECT c_key
                      FROM   tr
                      WHERE  ht_id = (SELECT ht_id
                                      FROM   ht
                                      WHERE  ht_name = '귀여움주위'))
GROUP  BY c_key;

HashTag를 검색했을때 관계테이블을 통해 포함하고있는 커뮤니티(c_key)를 Any를 통해 전부 받고

그룹 관련된 정보들과 Group_concat 을 통해 커뮤니티가 가지고 있는 HashTag를 하나의 String으로 반환하려 했다.

하지만 해당 코드의 결과는 이러했다.

ht 테이블에 대한 어떠한 관계도 지정해 주지 않아 ht테이블의 모든 데이터가 출력되는 현상이 발생했다.

c_key 가 지정되면 자동으로 관계테이블에 의해 ht 테이블에서 필터링해 출력 해줄거라는 내 착각이였다.

이에 join방식을 생각하게 되었고, 관련된 정보를 찾아보았다.

일반적인 join과 다르게 다대다 관계에서 관계테이블이 있는 경우 더욱 복잡해졌지만 left조인을 통해 해결 할 수 있었다.

SELECT c.*,
       Group_concat(h.ht_name) AS hashTag
FROM   cm c
       LEFT JOIN tr t
              ON c.c_key = t.c_key
       LEFT JOIN ht h
              ON t.ht_id = h.ht_id
WHERE  c.c_key = ANY (SELECT c_key
                      FROM   tr
                      WHERE  ht_id = (SELECT ht_id
                                      FROM   ht
                                      WHERE  ht_name = '귀여움주위'))
GROUP  BY c_key;

커뮤니티 테이블에  관계테이블을 left join하고 , 관계 테이블에 해쉬테그 테이블을 left join시키는 방식으로 해결했다.

이를 통해 c_key가 정해지면 처음 의도했던 대로 ht테이블이 관계테이블에 의해 필터링된 결과를 반환헀다.

이를 통해 HashTag를 통해 검색할수 있는 SQL을 완성할수 있었다.

'Spring & SpringBoot' 카테고리의 다른 글

dsl 에 subquery 사용 경험  (0) 2023.06.17
JPA SQL 오류 경험  (0) 2023.02.05
Spring security 시작하기  (0) 2023.01.20
MockMVC  (0) 2023.01.13
SpringBoot JPA 사용하기  (0) 2022.12.30
    'Spring & SpringBoot' 카테고리의 다른 글
    • dsl 에 subquery 사용 경험
    • JPA SQL 오류 경험
    • Spring security 시작하기
    • MockMVC
    Gyuseok
    Gyuseok

    티스토리툴바