테스트 사이트 - 개발 중인 베타 버전입니다

sql 쿼리 문의드립니다... 채택완료

김준수사랑 5개월 전 조회 1,653

select * from g5_write_free where wr_option NOT IN ('secret') 이렇게 쿼리를 날리면

옵션값이 html1,secret 인 경우 검색이 되는데요..

검색이 안되어야 정상아닌가요???

 

옮션값에 secret 이거 하나만 있으면 검색이 안되는데 위에 처럼 html1,secret 있으면 검색이되어버리네요

제가 뭘 잘못알고 있는건지 아니면 다른부부닝 잘못된건지....

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
5개월 전

wr_option NOT IN ('secret') <==> wr_option !='secret' 동일합니다

wr_option 값이 "html1,secret" 이면 당연히  wr_option !='secret' 인 거죠

 

참고로

wr_option ='secret' or wr_option ='html' 이것을 간단히 한 형태가 wr_option IN ('secret', 'html') 

wr_option NOT IN ('secret', 'html') ==> wr_option !='secret' and wr_option !='html'

 

질문의 경우 다음처럼 해도 됩니다

not INSTR('wr_option', 'secret')

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

균이
5개월 전
not INSTR('wr_option', 'secret') 오류 임다==> not INSTR(wr_option, 'secret')

댓글을 작성하려면 로그인이 필요합니다.

5개월 전

html1 이 포함되어 있기 때문에 검색이 되는 겁니다.  NOT IN ('secret') 로 검색을 할 경우
정확히 'secret' 만 제외가 되기 때문이예요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

5개월 전

NOT IN ('secret') 이 문법이 잘못되진 않았습니다.

 

다만, 현재 사용하실려는 상황에서는 적절치 않을 뿐입니다.

 

해석하자면, 단일 문자열 + 정확하게 일치 해야만 합니다.

 

문제는 실제 데이터가 저장되는 WR_OPTION에서는 html1,secret 해서 , 콤마 형태로 저장되기 때문에

 

필터링이 되지 않아 전체가 다 나오는 것입니다.

 

즉 문법 오류가 아니라, 사용하고자 하는 상황에서는 맞지 않는 문법이라 보시면 됩니다.

 

, 콤마가 있을 땐 find_in_set() 함수를 이용해보는 것도 좋을 듯 합니다.

 

</p>

<p>SELECT * 

FROM g5_write_free 

WHERE FIND_IN_SET('secret', wr_option) = 0;</p>

<p>

 

https://www.w3schools.com/sql/func_mysql_find_in_set.asp

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

e
5개월 전

select * from g5_write_free where wr_option not like '%secret%'

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

김준수사랑
5개월 전
not like '%secret%' 이 문법은 알고 있는데요

NOT IN ('secret') 이문법이 잘못된것인지를 질문드렸습니다
e
eyekiss
5개월 전
NOT IN ('secret') 은 wr_option!='secret' 과 같은 의미 입니다.

댓글을 작성하려면 로그인이 필요합니다.

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

로그인