IN검색을 LIKE검색처럼 쓸 수 있을까요? 0 2 301

by mjee [SQL Query] mysql select문 [2019.04.14 18:43:07]


안녕하세요! 

모두 주말 잘 보내고 계신가요?

날씨가 따뜻해지다가 비오면서 다시 쌀쌀해졌네요 . 모두 감기 조심하시기 바랍니다.

 

질문입니다..

 

아래와 같은 데이터가 있습니다.

 

테이블 명 : animal

이름(문자열) 코드(문자열)
1
2
호랑이 3
토끼 1,2,3

 

위와 같은 데이터에서 원하는 코드를 복수(1~3개) 선택하여 그 코드가 있는 데이터를 조회하고자 합니다.

select * from animal

  where 코드 like '%2%'

  or 코드 like '%3%'

 

혹은

 

select * from animal 

  where 코드 in (2,3)

 

두 쿼리중에 위 like를 쓰는 쿼리는 소스특성상 쿼리 or절을 동적으로 추가하지 못하여 아래 in을 사용하여 조회를 하려고 합니다.

 

위의 내용같이 프로그램을 만들었는데

in 조건으로 2나 3을 각각 하나씩 넣어보면 해당 코드를 딱 하나씩만 가진 데이터가 조회되고 (위 테이블 표에서 소, 호랑이가 나오며 토끼는 표시가 안됨)

1을 넣으면 복수로 선택한 토끼까지 선택이됩니다.

 

in검색을 위와 같이 사용이 불가능한가요?

복수로 조건을 넣을 경우 앞자리만 비교를 하는건지...

 

체크한 코드가 포함되어있으면 데이터가 다 나오도록 (위 표에서 1이나 2나 3 하나씩만 체크하더라도 토끼가 표시되도록) 할 수 있는 방법이 있을까요?

 

가능하다면 도움 부탁드립니다..

by 마농 [2019.04.15 09:04:25]

1. 애초에 animal 테이블을 (토끼 1,2,3) 형태가 아닌
  - (토끼 1)(토끼 2)(토끼 3) 형태로 만드는 방법이 있습니다.
2. 아니면 어떤 조건이 오든지간에, 토끼는 무조건 포함되도록 OR 조건을 주던가요.
  - WHERE 코드 IN ('2', '3', '1,2,3')  -- '1,2,3' 은 항상 포함되도록


by 색즉시공 [2019.04.19 22:01:04]

찿는 문자열을 일정크기로 만들어서
(예: 2자리면 '1 2 ' , '1 3 ' , '1 2 3 ' , '3 ')

WHERE (INSTR(코드,TRIM(SUBSTR('찾는문자열' ,1 ,2)))> 0
   OR  INSTR(코드,TRIM(SUBSTR('찾는문자열' ,3 ,2)))> 0
   OR  INSTR(코드,TRIM(SUBSTR('찾는문자열' ,5 ,2)))> 0)

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