제목이 좀 헷갈리죠? 저도 쓰면서 어떤게 적당할지 아래처럼 고민하다가 그냥 저렇게 했습니다.
(1) where절에서 in 사용하는데 replace로 치환해서 검색
(2) in과 replace 동시에 쓰기
혹은
(3) FIND_IN_SET 에서 replace 하기 등등
아무튼 제목은 넘어가고 본문으로 가겠습니다.
상황은 이렇습니다.
어떤 DB의 어떤 Table에 아래와같이 값이 있습니다.
(1)
즉 Names라는 컬럼에는 다수의 사람 이름을 '|' 라는 구분자를 통해 저장시키고 있는 상황이죠. 그리고 우리는 'AA'라는 사람이 포함되어있는 ROW를 추출해 내어야 합니다. 여기서 단순하게 생각해버리면 오류를 범할 수 있습니다.
select * from DB.TABLE where Names like '%AA%'
이렇게요. 나와선 안될 2번 row까지 같이 잡혀버리죠. '에이 누가 이렇게해~' 라고 하실 수 있지만 실제로 많이 발생하는 실수 유형입니다.
(2)
그리고 구분자가 단순히 콤마(,) 였다면 in query를 통해 단순히 처리할 수 있었을겁니다. 아, 제목에서도 IN 이라고 했지만, 사실 이런상황에서는 FINID_IN_SET을 사용하는게 좋습니다. 아래처럼요.
select * from DB.TABLE where FIND_IN_SET( 'AA', Names )
(3)
하지만 오늘의 문제! 구분자가 콤마(,)가 아닌 경우를 만날 상황이 있겠죠!! 걱정마시고 FIND_IN_SET에 REPLACE를 섞어서 사용하시면 됩니다. 아래처럼요~!
select * from DB.TABLE where FIND_IN_SET( 'AA', REPLACE( Names, '|', ',' ) )
결과적으로 구분자를 '|' 에서 ',' 콤마로 변경 시켜 FIND_IN_SET이 동작하도록 한 것입니다. 겪고계신 문제가 해결되었으면 좋겠습니다~! 읽어주셔서 감사합니다!!
'DB > MySQL, Maria' 카테고리의 다른 글
The following indexes appear to be equal and one of them should be removed / 인덱스 추가할때 나는 에러 (0) | 2022.10.26 |
---|
댓글