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가지인데.. 좀 아닌 것 같아 질문 드립니다.
- JOIN으로 조건 주고 SELECT할 때는 서브 쿼리로 가져오기
- JOIN 문을 두 번 쓰기
근데 둘 다 좀 아닌 것 같아서 질문드립니다.
1 답변
-
요구사항이 정확하게 무엇인지 알 수 없지만 일단 subject.number IN (1) 조건을 포함하면 전체를 가져올 수 없습니다.
서브쿼리를 사용하면 가능하긴 합니다만, 이런 방법으로 query를 만드시면 나중에 유지관리할 때 문제가 생길 가능성이 큽니다.
반드시 한번의 request로 받아야 하는게 아니라면 성능이 떨어지더라도 query를 나눠서 요청해보시는게 좋을 것 같습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력