http://www.mysqlkorea.co.kr
한글매뉴얼 5.0 , 한글매뉴얼 5.1 , MySQL 5.1 HA , 사용자매뉴얼
한글매뉴얼 5.0  
한글매뉴얼 5.1  
MYSQL 5.1 HA  
사용자매뉴얼  
영문매뉴얼  
최신글
mysql master - s…
김선영 아나운서…
'연애의 맛' 시즌…
[대림 NEWS] 대림…
연애의맛 정준 소…
 
한글매뉴얼 5.0 > 매뉴얼존 > 한글매뉴얼 5.0
 

13.2.8.9. 서브쿼리 에러

 

서브쿼리에만 적용되는 몇몇 에러들이 있으며 이 장에서는 그들에 대해 설명한다.

  • 서브 쿼리에서 부정확한 수의 컬럼:
ERROR 1241 (ER_OPERAND_COL)
 
SQLSTATE = 21000
 
Message = "Operand should contain 1 column(s)"

이 에러는 다음과 같은 경우에 발생 한다.:

SELECT (SELECT column1, column2 FROM t2) FROM t1; 

사용 목적이 비교인 경우, 여러분은 여러 개의 컬럼을 리턴 하는 서브쿼리를
사용 할 수 있다. 13.2.8.5레코드 서브쿼리부분을 참조 하라.
그러나 다른 SQL문들에서 서브쿼리는 scalar 연산 함수이어야 한다.
  • 서브쿼리에서 부정확한 수의 레코드:
ERROR 1242 (ER_SUBSELECT_NO_1_ROW)
 
SQLSTATE = 21000
 
Message = "Subquery returns more than 1 row"
 
이 에러는 서브쿼리가 하나 이상의 레코드를 리턴하는 문장들에 대해 발생한다.
다음 예문을 생각 해 보면:
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

 

SELECT column1 FROM t2 는 단지 하나의 레코드를 리턴한다.
이전 쿼리는동작한다. 만일 서브쿼리가 하나 이상의 레코드를 리턴하면
error 1242
가 발생 한다. 이 경우 그 쿼리는 다음과 같이 갱신 되어야 한다.
SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);
서브쿼리에서 부정확한 테이블의 사용:
Error 1093 (ER_UPDATE_TABLE_USED)
SQLSTATE = HY000
Message = "You can't specify target table 'x'
for update in FROM clause"
이 에러는 다음과 같은 경우에 발생 한다: 
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
여러분은 UPDATE문 내에서 할당을 위한 서브쿼리를 사용할 수 있는데 
그 서브쿼리들은 SELECT문 뿐만 아니라 UPDATE DELETE문들 내에서
적합하기 때문이다. 그러나 서브쿼리의 FROM절과 업데이트 target모두를
위해 같은 테이블을 사용할 수 없다.

트랜잭션 저장 엔진을 위해 서브쿼리절의 실패는 전체 문장을 실패로 만들게 된다.
비 트랜잭션 저장 엔진의 경우 그 에러가 발생하기 전에 만들어진 데이터 수정은 보존된다.

상위
13.2.8. 서브쿼리
13.2.8.1. 단계적 변수로써의 …
13.2.8.2. 서브쿼리를 이용한 …
13.2.8.3. ANY, IN과 SOME를 가…
13.2.8.4. ALL을 가진 서브쿼리
13.2.8.5. 로우 서브쿼리
13.2.8.6. EXISTS and NOT EXIS…
13.2.8.7. 서로 관련된 서브쿼…
13.2.8.8. FROM 절 안에서의 서…
13.2.8.9. 서브쿼리 에러
13.2.8.10. 서브쿼리 최적화
13.2.8.11. MySQL 초기버전 용 J…
MySQL Korea 사이트의 컨텐츠 소유권은 (주)상상이비즈에 있으므로 무단전재를 금합니다.
ⓒ 2010-2011 ssebiz All Rights Reserved.