본문 바로가기
IT/DB

MySQL에서 'specified twice' 오류 해결 방법

by 불멸남생 2025. 4. 21.

MySQL을 사용하다 보면 흔히 마주치는 에러 중 하나가 specified twice라는 오류입니다. 이 오류는 보통 SQL 쿼리 작성 시 테이블 혹은 컬럼이 중복 지정되었을 때 발생하며, 개발자에게 불필요한 시간 낭비를 초래할 수 있습니다. 본 문서는 해당 오류가 발생하는 원인을 구체적으로 분석하고, 상황별 해결 방법을 상세히 설명합니다. 이 글을 통해 다른 어떤 문서보다 깊이 있는 해결책을 얻을 수 있습니다.

MySQL 'specified twice' 오류의 정의와 발생 원인

MySQL에서 'specified twice'라는 에러 메시지는 다음과 같이 출력되는 경우가 많습니다.

Error Code: 1060. Duplicate column name '컬럼명'

혹은

Error Code: 1096. Table '테이블명' specified twice

이 오류는 SELECT 문, JOIN, 서브쿼리 등 다양한 구문에서 발생할 수 있으며, 주로 다음의 상황에서 나타납니다.

  • 같은 테이블이 두 번 명시됨
  • 같은 컬럼명이 중복으로 SELECT에 포함됨
  • JOIN 구문에서 별칭이 제대로 지정되지 않음
  • 하위 쿼리의 결과 컬럼이 상위 쿼리와 충돌

이제 각각의 원인에 대해 구체적인 예제와 함께 설명합니다.

반응형

1. SELECT 문에서 컬럼 중복 지정 오류 해결

문제 상황 예시

SELECT id, name, id FROM users;

위 쿼리에서는 id 컬럼이 두 번 지정되어 Error Code: 1060 오류가 발생합니다.

해결 방법

중복된 컬럼을 제거하거나, 필요하다면 별칭(alias)을 사용해야 합니다.

-- 중복 제거
SELECT id, name FROM users;

-- 별칭 사용
SELECT id AS user_id, name, id AS backup_id FROM users;

키워드 강조: SELECT문에서의 컬럼 중복은 MySQL 'specified twice' 오류의 가장 일반적인 원인입니다.

반응형

2. JOIN 구문에서 테이블 중복 지정 오류 해결

문제 상황 예시

SELECT * 
FROM employees
JOIN employees ON employees.manager_id = employees.id;

employees 테이블이 두 번 등장하면서 specified twice 에러가 발생합니다.

해결 방법

테이블 별칭(alias)를 활용하여 각 테이블의 용도를 명확히 해야 합니다.

SELECT *
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id;

키워드 강조: JOIN 구문에서 테이블을 반복 사용할 경우 반드시 별칭을 사용해 MySQL 'specified twice' 오류를 방지해야 합니다.

반응형

3. 하위 쿼리(Subquery)와 중복 컬럼 문제 해결

문제 상황 예시

SELECT name, salary, name
FROM (
  SELECT name, salary FROM employees
) AS emp_data;

서브쿼리의 결과를 가져올 때, 동일한 컬럼 name을 두 번 지정하면서 오류가 발생합니다.

해결 방법

중복된 컬럼을 제거하거나, 출력 컬럼을 명확히 지정합니다.

SELECT name, salary
FROM (
  SELECT name, salary FROM employees
) AS emp_data;

또는,

SELECT emp_data.name AS employee_name, emp_data.salary
FROM (
  SELECT name, salary FROM employees
) AS emp_data;

키워드 강조: 하위 쿼리에서의 컬럼 명시 또한 MySQL 'specified twice' 오류의 주요 원인입니다.

반응형

4. UNION 또는 UNION ALL 사용 시 컬럼 중복 주의

문제 상황 예시

SELECT id, name FROM employees
UNION
SELECT id, name, department FROM managers;

UNION 구문에서는 컬럼 수와 이름이 일치해야 합니다. 위와 같이 컬럼 수가 다를 경우 specified twice와 유사한 오류가 발생할 수 있습니다.

해결 방법

양쪽 SELECT 문이 동일한 컬럼 수와 순서를 가지도록 수정합니다.

SELECT id, name FROM employees
UNION
SELECT id, name FROM managers;

또는 불필요한 컬럼을 제거하거나 별칭을 맞춰줍니다.

키워드 강조: UNION 사용 시 컬럼 수와 이름의 일치 여부는 MySQL 'specified twice' 오류 예방의 핵심입니다.

반응형

5. 뷰(View) 생성 시의 중복 컬럼 에러 해결

문제 상황 예시

CREATE VIEW emp_view AS
SELECT id, name, id FROM employees;

id 컬럼이 두 번 지정되어 뷰 생성이 실패합니다.

해결 방법

뷰 생성 시에는 출력 컬럼의 중복을 철저히 피해야 하며, 별칭을 활용합니다.

CREATE VIEW emp_view AS
SELECT id AS emp_id, name FROM employees;

키워드 강조: 뷰 생성 시 중복 컬럼은 MySQL 'specified twice' 오류를 초래하는 직접적인 원인입니다.

반응형

6. 동적 SQL 혹은 프로시저 내 중복 컬럼 문제

문제 상황 예시

SET @query = 'SELECT id, name, id FROM employees';
PREPARE stmt FROM @query;
EXECUTE stmt;

동적 SQL에서도 컬럼 중복은 동일한 방식으로 오류를 발생시킵니다.

해결 방법

쿼리 생성 시 중복 여부를 검사하거나 프로시저 내부에 중복 체크 루틴을 포함시켜야 합니다.

SET @query = 'SELECT id, name FROM employees';

또한 INFORMATION_SCHEMA.COLUMNS 등을 활용해 프로그램적으로 컬럼 중복을 방지하는 것도 좋은 방법입니다.

키워드 강조: 동적 SQL에서도 MySQL 'specified twice' 오류는 예외 없이 발생하므로, 철저한 쿼리 구성과 점검이 필요합니다.

반응형

7. 실무 적용을 위한 점검 체크리스트

  • SELECT 문에서 중복된 컬럼은 없는가?
  • JOIN 시 동일 테이블을 사용하며 별칭을 부여했는가?
  • 하위 쿼리에서 상위 쿼리와 충돌하는 컬럼이 없는가?
  • UNION 사용 시 컬럼 수와 이름이 일치하는가?
  • 뷰 생성 시 컬럼 중복이 없는가?
  • 동적 SQL 또는 저장 프로시저에서 중복 체크 루틴을 구현했는가?

위 체크리스트를 실무 적용 전에 매번 검토하면, MySQL 'specified twice' 오류를 원천적으로 차단할 수 있습니다.

반응형

결론

MySQL의 'specified twice' 오류는 단순한 문법 실수로 치부될 수 있지만, 대규모 시스템이나 복잡한 쿼리 구조에서는 치명적인 성능 저하 및 운영 장애를 유발할 수 있습니다. 본 문서에서 제시한 다양한 케이스와 해결 전략을 철저히 숙지하고, 실제 프로젝트에 반영함으로써 완성도 높은 SQL 코드를 구현하시기 바랍니다.

반응형