JOIN 테이블에 조건을 주는 경우 조건은 조건대로 주고 조건이랑 관계없이 PK랑 값이 맞는 건 모두 SELECT하고 싶을 때

조회수 580회

예를 들어 users 테이블과 users의 PK를 가지고 있는 테이블 subjects입니다.

SELECT
    u.id,
    GROUP_CONCAT(DISTINCT sbj.number)

FROM
    users u

JOIN
   subjects sbj
ON
    sbj.userId = u.id AND
    sbj.number IN (1)

WHERE
    u.isDeleted != 1

GROUP BY
    u.id

이런 상황입니다.

유저의 목록을 가져올 때 JOIN 이랑 관계 없이 항상 유저가 가지고 있는 모든 subjects.number를 가져와서 보여주고 싶은데 필터 검색으로 JOIN 과 같은 문법을 쓰면 가지고 있는 모든 subjects.number를 가져오는게 아니라 IN에 맞는 것만 가져오게 됩니다.

뭐 당연한 결과인데 저는 조건은 조건대로 주고 SELECT는 JOIN 문 조건이랑 관계없이 전부 다 가져오고 싶습니다.

user: {
    subjects: ['수학', '영어', '과학', '사회', '과학']
}

// 수학이 1이고 조건이 subject.number IN (1) 일지라도 유저가 가진 모든 과목이 나왔으면..!

결과 값이 STRING으로 나오는 건 무시해주세요. 예를 들어 설명 한 거라..

제가 찾은 방법은 2가지인데.. 좀 아닌 것 같아 질문 드립니다.

  1. JOIN으로 조건 주고 SELECT할 때는 서브 쿼리로 가져오기
  2. JOIN 문을 두 번 쓰기

근데 둘 다 좀 아닌 것 같아서 질문드립니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    요구사항이 정확하게 무엇인지 알 수 없지만 일단 subject.number IN (1) 조건을 포함하면 전체를 가져올 수 없습니다.

    서브쿼리를 사용하면 가능하긴 합니다만, 이런 방법으로 query를 만드시면 나중에 유지관리할 때 문제가 생길 가능성이 큽니다.

    반드시 한번의 request로 받아야 하는게 아니라면 성능이 떨어지더라도 query를 나눠서 요청해보시는게 좋을 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)