Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL Benchmark에서 'Subquery returns more than 1 row' 오류 해결 방법

MySQL에서 BENCHMARK() 함수를 사용할 때 서브쿼리가 여러 개의 행(row)을 반환하면 오류가 발생합니다. 이 문제를 해결하려면 여러 행 대신 스칼라 값(단일 값) 또는 단일 행을 반환하도록 쿼리를 수정해야 합니다.

올바른 문법

SELECT yourColumnName FROM yourTableName WHERE yourCondition;

예제 테이블 생성하기

문법을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table UserDemo
    -> (
    -> UserId int,
    -> UserName varchar(20),
    -> RegisteredCourse varchar(10)
    -> );
Query OK, 0 rows affected (0.67 sec)

데이터 삽입하기

INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into UserDemo values(1,'John','Java');
Query OK, 1 row affected (0.16 sec)
mysql> insert into UserDemo values(2,'Larry','C');
Query OK, 1 row affected (0.21 sec)
mysql> insert into UserDemo values(3,'Carol','C++');
Query OK, 1 row affected (0.11 sec)
mysql> insert into UserDemo values(4,'Mike','C#');
Query OK, 1 row affected (0.17 sec)

전체 레코드 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from UserDemo;

실행 결과는 다음과 같습니다.

+--------+----------+------------------+
| UserId | UserName | RegisteredCourse |
+--------+----------+------------------+
|      1 | John     | Java             |
|      2 | Larry    | C                |
|      3 | Carol    | C++              |
|      4 | Mike     | C#               |
+--------+----------+------------------+
4 rows in set (0.00 sec)

오류 발생 상황

WHERE 조건 없이 서브쿼리를 BENCHMARK 함수에 사용하면 다음과 같은 오류가 발생합니다.

mysql> select benchmark(1000,(select RegisteredCourse from UserDemo));
ERROR 1242 (21000): Subquery returns more than 1 row

오류 해결 방법

서브쿼리가 두 개 이상의 행을 반환했기 때문에 오류가 발생한 것입니다. 따라서 WHERE 절을 추가하여 단일 행만 반환하도록 쿼리를 수정해야 합니다.

mysql> select RegisteredCourse from UserDemo where UserId=1;

실행 결과는 다음과 같습니다.

+------------------+
| RegisteredCourse |
+------------------+
| Java             |
+------------------+
1 row in set (0.00 sec)

이처럼 BENCHMARK() 함수 내부의 서브쿼리는 반드시 하나의 값만 반환해야 하며, WHERE 조건을 활용해 결과를 하나로 제한하면 오류를 간단히 해결할 수 있습니다.