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 보면 도움될 것이다.
'SQL' 카테고리의 다른 글
[MySQL] Self Join 예제 (0) | 2016.02.22 |
---|---|
[MySQL] order by 정렬 (0) | 2016.01.26 |
MySQL 테이블간 참조무결성 (0) | 2015.09.28 |
[MySQL] 두개의 테이블의 데이터 조인하여 내용 Update (0) | 2015.09.16 |
[MySQL] DataDiff 함수 기능 테스를 위한 테이블 생성과 Query (0) | 2015.09.13 |