• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    1. CALL 구문
    2. DELETE 구문
    3. DO 구문
    4. HANDLER 구문
    5. INSERT 구문
    6. LOAD DATA INFILE 구문
    7. LOAD XML 구문
    8. REPLACE 구문
    9. SELECT 구문
    10. 서브 쿼리 구문
    1. 스칼라 피연산자로 서브 쿼리
    2. 서브 쿼리를 사용한 비교
    3. ANY, IN 또는 SOME을 사용한 서브 쿼리
    4. ALL을 사용한 서브 쿼리
    5. 13.2.10.5 row(행) 서브 쿼리
    6. EXISTS 또는 NOT EXISTS를 사용한 서브 쿼리
    7. 상관 서브 쿼리
    8. FROM절의 서브 쿼리
    9. 서브 쿼리 오류
    10. 서브 쿼리의 최적화
    11. 서브 쿼리의 결합으로 재 작성
    11. UPDATE 구문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.2.10.9 서브 쿼리 오류

서브 쿼리에만 적용되는 오류가 일부 존재 하며, 이 섹션에서는 그 것에 대하여 설명 합니다.

  • 지원되지 않는 서브 쿼리 구문 :

    ERROR 1235 (ER_NOT_SUPPORTED_YET)
    SQLSTATE = 42000
    Message = "This version of MySQL doesn't yet support
    'LIMIT & IN/ALL/ANY/SOME subquery'"
    

    이것은 MySQL이 다음과 같은 형식의 문을 지원하지 않는다는 것을 보여줍니다.

     SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)
    
  • 서브 쿼리에서 잘못된 열 수 :

     ERROR 1241 (ER_OPERAND_COL)
     SQLSTATE = 21000
     Message = "Operand should contain 1 column (s)"
    

    이 오류는 다음과 같은 경우에 발생합니다.

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

    목적이 행의 비교 인 경우는 여러 컬럼을 돌려 서브 쿼리를 사용할 수 있습니다. 다른 컨텍스트에서는 서브 쿼리는 스칼라 피연산자이어야합니다. 섹션 13.2.10.5 "행 서브 쿼리" 를 참조하십시오.

  • 서브 쿼리에서 잘못된 행 수 :

     ERROR 1242 (ER_SUBSELECT_NO_1_ROW)
     SQLSTATE = 21000
     Message = "Subquery returns more than 1 row"
    

    이 오류는 서브 쿼리가 최대 1 행만 반환해야 없는데도 여러 행을 반환 문에 발생합니다. 다음의 예를 생각해 보겠습니다.

     SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
    

    SELECT column1 FROM t2 가 1 행만 반환하면 이전 쿼리가 작동합니다. 이 서브 쿼리가 여러 행을 반환하는 경우 오류 1242가 발생합니다. 이 경우이 쿼리를 다음과 같이 바꾼다.

     SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);
    
  • 하위 쿼리가 잘못 사용되는 테이블 :

     Error 1093 (ER_UPDATE_TABLE_USED)
     SQLSTATE = HY000
     Message = "You can not specify target table 'x'
     for update in FROM clause "
    

    이 오류는 테이블을 변경하고, 하위 쿼리 같은 테이블에서 선택하려고하는 다음과 같은 경우에 발생합니다.

     UPDATE t1 SET column2 = (SELECT MAX (column1) FROM t1);
    

    서브 쿼리는 SELECT 문뿐만 아니라 UPDATE 및 DELETE 문 내에서도 적합하기 때문에 UPDATE 문에서 지정을 위해 서브 쿼리를 사용할 수 있습니다. 그러나 서브쿼리의 FROM절과 업데이트 target모두를 위해 같은 테이블을 사용할 수 없습니다.

트랜잭션 스토리지 엔진의 경우, 서브 쿼리가 실패하면 전체 문이 실패합니다. 비 트랜잭션 스토리지 엔진의 경우, 오류가 발견되기 전에 수행 된 데이터 변경이 유지됩니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved