MSSQL 질문이있습니다.. 0 2 136

by 태켜니 [SQL Query] query MSSQL [2019.04.15 18:37:17]


안녕하세요 죄송하지만 감히 질문하나만 드립니다..ㅠㅠ

질문내용은 아래와 같습니다..

 

특정 raw만 DELETE하려고 합니다..

순번      name(컬럼)

1         손오공,저팔계,사오정,삼장법사,등등

2         손오공,사오정

3         손오공

4         저팔계, 삼장법사, 등등

5         사오정

6         저팔계

 

일때,

손오공 or 사오정 or 저팔계로 구성된 raw만  삭제 

하려면.. (위의 경우는 2,3,5,6 raw가 삭제되어야 함)

쿼리를 어떻게 구성해야 할까요 ..??

 

위처럼 3개만 포함되는게 아니라 3천개 정도를 포함해야하여 .. 골머리앓다가 도저히 해결책을 찾을수 없어 질문드립니다 ㅠㅠ

by 마농 [2019.04.16 09:05:36]
SELECT *
  FROM t
 WHERE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(name
       , '손오공', '')
       , '저팔계', '')
       , '사오정', '')
       , ',', '')
       , ' ', '')
       = ''
;

 


by 마농 [2019.04.16 09:18:37]
WITH data_t AS
(
SELECT 1 seq, '손오공,저팔계,사오정,삼장법사,등등' name
UNION ALL SELECT 2, '손오공,사오정'
UNION ALL SELECT 3, '손오공'
UNION ALL SELECT 4, '저팔계, 삼장법사, 등등'
UNION ALL SELECT 5, '사오정'
UNION ALL SELECT 6, '저팔계'
)
, code_t AS
(
SELECT '손오공' name
UNION ALL SELECT '사오정'
UNION ALL SELECT '저팔계'
)
SELECT *
  FROM data_t
 WHERE seq IN (SELECT a.seq
                 FROM data_t a
                INNER JOIN code_t b
                   ON CHARINDEX(CONCAT(',', b.name, ','), CONCAT(',', REPLACE(a.name, ' ', ''), ',')) > 0
                GROUP BY a.seq, a.name
               HAVING COUNT(*) = LEN(a.name) - LEN(REPLACE(a.name, ',', '')) + 1
               )
;

 

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