'MySQL Update Where 조건절'에 해당되는 글 1건

728x90

Update SQL 문에서 WHERE 조건절에 서브쿼리 조건을 넣어서 해야 할 경우가 있다.


목적 : 공백이 2칸 떨어진 칼럼을 찾아서 공백 1개로 변경


Update 를 하기전에 반드시 먼저 조회부터 하는 습관을 들여야 한다.


내가 하려는 것이 맞는지 확인차 한개만 업데이트를 해본다.

select uid, item, subject, content from data where uid=572;
update data SET subject = replace(subject,'  ',' ') where uid=572;

작업할 대상 전체를 조회하는 SQL 문을 만들어서 조회해본다.

select uid, item, subject, content from data where uid IN (select uid from data where subject LIKE '%  %');


// 에러 발생
update data SET subject = replace(subject,'  ',' ') where uid IN (select uid from data where subject LIKE '%  %');

같은 테이블에서 WHERE 조건절에 같은 테이블의 서브쿼리를 만들면 에러가 발생한다.

만약, 서브쿼리 SQL 문이 다른 테이블의 조건이었다면 에러가 발생하지 않을 것이다.


// 정상 실행
update data SET subject = replace(subject,'  ',' ') where uid IN (select uid FROM (select uid from data where subject LIKE '%  %') a);

같은 테이블에서 서브쿼리를 만들어야 한다면, 서브쿼리 문을 가상의 테이블로 만들어줘야 한다.

다른 테이블처럼 인식시키기 위해서다.

MySQL 에서는 가상 테이블에 별칭을 붙여줘야 제대로 동작된다.

WHERE 조건절에서 IN 을 사용한 이유는 서브쿼리 결과가 1개 아니라 여러개 나올 수 있기 때문이다.


Update 문에 대한 전반적인 내용을 살펴보려면 http://www.gurubee.net/lecture/2183 보면 도움될 것이다.



블로그 이미지

Link2Me

,