아래에 질문했는데 제가 멋모르고 너무 단순하게 질문을 드려서 정리해서 다시 질문드립니다!!
1. 테이블 형태
idx | name | code |
1 | 과일상점1 | 01,02,03 |
2 | 과일상점2 | 06,04,02,01 |
3 | 과일상점3 | 03,02,01 |
4 | 과일상점4 | 06 |
5 | 과일상점5 | 04,06 |
DB: MySQL 5.6.x
2. 목적
위와 같이 테이블이 구성되어있고, 데이터가 들어있습니다.
code 는 과일의 종류이구요( 01 = 배 , 02 = 사과 , 03 = 귤 등등 )
목적은 판매중인 과일종류를 code로 만들어놓고 넣어두고 있습니다
3. 예상결과
Ex:) code 05,06 가 들어있는 과일상점을 조회하려고 한경우
과일상점2 , 과일상점5 가 결과로 나와야 합니다.( 06,06이 모두포함된 컬럼은 2개 이기 때문에 )
Ex:) code 01,04,06 이 들어가있는 과일상점을 조회하려고 한경우,
과일상점2 가 나와야합니다. ( 01,04,06 모두가 들어있는 컬럼은 1개 이기 때문에 )
4. 제가해본 쿼리..
그럼 여기서 01(배) 를 팔고있는 상점정보를 가져오기 위해 쿼리를 아래처럼 했더니 결과가 나오지 않네요
검색하는 갯수는 동적이라서 01 로 1개 일수도있고 01,02 로 2개일수도 있고 01,02,03 로 3개일수도있습니다.
이때 동적인 케이스는 01 ~ 99개일듯합니다.
SELECT * FROM test WHERE code IN ('01','02'); X
SELECT a.temp
FROM(
SELECT '01,02,14' AS temp
UNION ALL
SELECT '01,02' AS temp
UNION ALL
SELECT '02,14' AS temp
) a
WHERE a.temp REGEXP '01|14'; X
아직 초짜인 저에겐 너무 어려운 부분이라 이렇게 조언을 구하고자 질문글을 올리게되었습니다ㅠㅠ
부디 작은 조언이라도 부탁드리겠습니다!
감사합니다.
SELECT a.idx , a.name , a.code , c.v_code FROM (SELECT 1 idx, '과일상점1' name, '01,02,03' code UNION ALL SELECT 2, '과일상점2', '06,04,02,01' UNION ALL SELECT 3, '과일상점3', '03,02,01' UNION ALL SELECT 4, '과일상점4', '06' UNION ALL SELECT 5, '과일상점5', '04,06' ) a -- Data 테이블 INNER JOIN (SELECT '01' code, '배' name UNION ALL SELECT '02', '사과' UNION ALL SELECT '03', '귤' UNION ALL SELECT '04', '감' UNION ALL SELECT '05', '밤' UNION ALL SELECT '06', '잣' ) b -- Code 테이블 ON INSTR(a.code, b.code) > 0 INNER JOIN (SELECT '01,02,04' v_code) c -- 검색조건 ON INSTR(c.v_code, b.code) > 0 GROUP BY a.idx, a.name, a.code, c.v_code HAVING COUNT(*) = LENGTH(c.v_code) - LENGTH(REPLACE(c.v_code, ',', '')) + 1 ;