한 컬럼의 다중 조건이 궁금합니다. 0 6 404

by 크리스정 [Oracle 기초] [2020.10.19 20:40:39]


안녕하세요 

너무 쉬울거 같은데 안풀려서 질문 드립니다.

name favorite
승호 사과
승호 딸기
승호 포도
명호 사과
명호 딸기
기호 사과
중현 사과
중현 딸기
중현 포도
현호 사과
현호 포도

 

만약에 위와 같은 테이블이 있다고 가정할때 딸기,포도,사과를 모두 좋아하는 사람을 뽑으려면 어떻게 해야 할까요?

 SELECT * FROM TABLE WHERE FAVORITE = '딸기'  AND..  의 경우에는 딸기 이후 조회가 안되고요..

 SELECT * FROM TABLE WHERE FAVORITE IN ('딸기','포도','사과') 의 경우에는 모두 포함되어 나오고요..

 OR조건을 사용하자니 두번쨰 쿼리와 다를게 없고... 참 난감하네요.. 엄청 간단할 거 같은데 안풀리네요.ㅠ 

 UNION ALL 같은 경우는 제외하고 가능할까요? 입력받는 과일이 30가지가 넘는 경우도 있어서요...

결과

-------------

승호

중현

 

나왔으면 좋겠습니다.

by pajama [2020.10.19 21:36:59]

안녕하세요. 효율적일지는 모르겠군요..

select name from table group by name having count(favorite) = (select count(distinct favorite) from table)


by 크리스정 [2020.10.20 05:04:11]

호곡 감사합니다 !!

 


by 크리스정 [2020.10.20 05:44:58]

아.. 안되는군요.. 질문드린 모두 포함시는 만족하나 두가지 선택시에 딸기, 포도의 경우 사과,딸기가 될지 사과,포도가 될지 모두 선택되는군요. ㅎㅎ


by 마농 [2020.10.20 07:56:35]
WITH t AS
(
SELECT '승호' name, '사과' favorite FROM dual
UNION ALL SELECT '승호', '딸기' FROM dual
UNION ALL SELECT '승호', '포도' FROM dual
UNION ALL SELECT '명호', '사과' FROM dual
UNION ALL SELECT '명호', '딸기' FROM dual
UNION ALL SELECT '기호', '사과' FROM dual
UNION ALL SELECT '중현', '사과' FROM dual
UNION ALL SELECT '중현', '딸기' FROM dual
UNION ALL SELECT '중현', '포도' FROM dual
UNION ALL SELECT '현호', '사과' FROM dual
UNION ALL SELECT '현호', '포도' FROM dual
)
SELECT name
  FROM t
 WHERE favorite IN ('딸기', '포도', '사과')
 GROUP BY name
HAVING COUNT(*) = 3
;

 


by 크리스정 [2020.10.20 21:18:26]

앗 감사합니다.!!!!그렇군요 !! 

select name

WHERE favorite IN ('딸기', '포도', '사과')

from table

group by name

having count(favorite) = (select count(distinct favorite) from table where favorite IN ('딸기', '포도', '사과')) 

아아... 감사합니다.!!!!!!!!!!!!!!!!!!!!!!!!!!!!


by 마농 [2020.10.21 08:10:54]

COUNT(favorite) 은 굳이 favorite 을 적어줄 필요가 없구요. COUNT(*)
서브쿼리 조건은? 아무도 사과를 좋아하지 않는 경우에는? 올바른 결과가 안나올 수 있습니다.
예) ('사과',딸기','살구') 조건 시 아무것도 안나와야 하는데, 결과가 나오는 오류.

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