조건절 중 in절 안의 값들을 and로 묶는 방법이있나요? 0 7 571

by 쿼리냠냠 [2021.11.15 15:43:11]


구루비 회원님들 안녕하세요. 
어떻게 이야기를 풀어서 말씀을 드릴지몰라, 예를 들어 설명하도록 하겠습니다. 
1:N관계의 테이블인데요. N의 테이블이 다음과 같이 있습니다.

N테이블

pk_id fk_id type
1 1 apple
2 1 banana
3 2 apple
4 3 banana

 

 N테이블에서  'type이 apple 이면서 banana' 인 경우를 출력하고싶어요.
apple이나 banana 둘중하나라면 where type in ( 'apple', 'banana')를 사용하면 되는데요.
하나의 컬럼(type)에서 여러 조건절이 완벽히 맞는 애를 출력하고싶어요. 

결과는 fk_id가 1인 애만 출력이 되길 원합니다.
(fk_id가 2인애는 banana가 없고 fk_id가 3인애는 apple없어서 출력이안됩니다. )


쉬운것 같은데. 알듯 말듯.... 잘안됩니다ㅠ
읽어주셔서 감사드립니다.
좋은 하루보내세요!

by 우주민 [2021.11.15 16:02:52]
SELECT T1.*
FROM TABLE_N T1
,(
SELECT fk_id, COUNT(DISTINCT type)
FROM TABLE_N
WHERE type IN ( 'apple', 'banana')
GROUP BY fk_id
HAVING COUNT(DISTINCT type) = 2
) T2
WHERE T1.fk_id = T2.fk_id

타입을 2개 입력했고, 이에 2종류를 모두 가지는 fk_id 를 추출 하는것이 포인트 같습니다.

T2 부분이 2종류의 입력값을 가지는 fk_id를 추출하는 쿼리 입니다.

해당 쿼리와 원본쿼리를 fk_id 로 조인해서 원하는 데이터를 도출할 수 있을 듯 하네요.


by 쿼리냠냠 [2021.11.17 10:05:05]

감사합니다. 
group by와 having절로 해결할 수 있군요!
덕분에 해결하였습니다.


좋은 하루보내세요!


by 마농 [2021.11.17 10:37:51]

type 에 중복이 없다면? Distinct 는 빼도 됩니다.


by pajama [2021.11.15 16:07:26]

안녕하세요. count distinct로 했습니다.

select * from table where fk_id in (
select fk_id from table where type in ('apple', 'banana') group by fk_id having count(distinct type) = 2
)


by 쿼리냠냠 [2021.11.17 10:06:05]

안녕하세요.

1:N의 관계에서 N의 타입이 중복인 경우 distinct도 생각해봐야겠네요.
답글 감사합니다.

좋은 하루 보내세요!


by 마농 [2021.11.16 09:47:37]

apple, banana, orange 이렇게 3개를 가진 fk_id 의 경우
조건에 부합하는 대상인 건가요? 대상이 아닌 건가요?


by 쿼리냠냠 [2021.11.17 10:03:19]

마농님 안녕하세요.

조건에 부합하는 대상입니다. 
where type in ( 'apple', 'banana')이라면, 'apple, banana, orange'도 포함의 대상입니다. 

완전히 일치해야한다는 부분의 말이 모호하게 적어놨네요.(죄송합니다)
where절에서 선언한 값들이 있으면됩니다. 

count == in절의 개수 입니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입