sql 쿼리 문의드립니다...

sql 쿼리 문의드립니다...

QA

sql 쿼리 문의드립니다...

답변 4

본문

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

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

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

 

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

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

이 질문에 댓글 쓰기 :

답변 4

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')

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

 


SELECT * 
FROM g5_write_free 
WHERE FIND_IN_SET('secret', wr_option) = 0;

 

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 129,112
© SIRSOFT
현재 페이지 제일 처음으로