통계 데이터 추출을 위한 쿼리를 작성하거나 기능 개발을 위한 동적쿼리를 작성하는 등
데이터베이스 쿼리문을 개발할 때는 집중력이 점점 흐려진다...
뻔히 보이는 오류임에도 뇌를 고생시키다보면 보이던 것도 보이지 않고, 알던 것도 모르게 된다.
해당 포스팅에서 집중력이 흐려질 때 볼 수 있는 쿼리 오류를 정리한다.
1. SQL 오류 (1054): Unknown column 'A.CODE' in 'field list'
SELECT A.CODE, -- B.CODE 로 변경해야 함
A.ID,
A.CODE_ID_NM
FROM code A, code_detail B
WHERE A.ID = B.ID;
SELECT update_date -- 서브쿼리에서 조회하고 있지 않은 컬럼
FROM (
SELECT ID,name,isUse
FROM code
WHERE id='A'
) A
해당 오류는 에러메세지 그대로다.
A.CODE 컬럼은 code 테이블의 필드 리스트에 존재하지 않는다.
컬럼 명이 비슷한 경우에, 테이블을 헷갈려서 SELECT 절에 컬럼을 잘못 입력한 경우 볼 수 있다.
또한 아래와 같이 HAVING 절에서 사용되어야 할 데이터가 WHERE 절에서 쓰고 있는
황당한 쿼리를 작성하고 있지는 않은지 확인하자
1.1 SQL 오류 (1054): Unknown column 'text' in 'where clause'
SELECT * FROM detail_code WHERE id=text;
-- 문자열은 ""로 묶어줘야한다.
WHERE 절에 문법이 잘못되었을 때, 해당 오류를 볼 수 있다.
계산식이나 비교구문을 자세히 보자
SELECT A.ID, COUNT(1) AS hap
FROM com_code A
LEFT OUTER JOIN com_detail_code B ON A.ID = B.ID
WHERE hap = 5 -- ??????몰?루?
GROUP BY A.CODE_ID
2. SQL 오류 (1052): Column 'ID' in field list is ambiguous
SELECT A.CODE,
ID, -- 테이블 Alias를 명시해주어야 함
CODE_ID_NM -- 두 테이블에 해당하는 컬럼 값이 1개밖에 없다면 오류가 발생하지 않음
FROM code A, code_detail B
WHERE A.ID = B.ID;
위 오류는 SELECT 절에서 출력할 컬럼들을 입력할 때,
어느 테이블의 데이터인지 명시해주지 않아서 발생한 오류다.
Join한 두 테이블이 모두 동일한 값을 가지고 있다면 어떤 테이블의 컬럼을 조회할지 명시해주어야 한다.
3. SQL 오류 (1136): Column count doesn't match value count at row 1
INSERT INTO com_code(
ID
,NAME
,CONTENT
,ISUSE
,NUM
,ETC1
,ETC2
,ETC3
)VALUES(
"AAA"
,"BBB"
,"CCC"
,"Y"
,1
,2
,3
);
INSERT INTO detail_code (id,name,content,data1,data2,data3,data4,data5,data6,data7)
VALUES ('A',1,"",NULL,"Y",null,null,null,null);
-- 컬럼의 개수가 맞지 않음
해당 오류도 에러 메세지에 다 나와있다.
하지만 오랫동안 쿼리를 짜고 있으면 오류 메세지를 제대로 볼 수 없다.
다음 오류는
테이블에 넣을 데이터의 개수가 컬럼 개수와 맞지 않아 발생한다.
테이블 컬럼의 개수와 VALUES 절의 데이터 개 수를 천천히 하나씩 세보자
4. SQL 오류 (1582): Incorrect parameter count in the call to native function 'IFNULL'
SELECT A.ID,
A.NAME,
A.CONTENT,
A.ISUSE,
IFNULL(A.DATE,1,0),
A.REGIST_DATE
FROM code A, code_detail B
WHERE A.ID='ASTY' AND A.ISUSE = "Y";
함수의 파라미터 개수가 잘못되었다.
사용하고 있는 함수의 개수를 잘 체크해보고 수정하도록 하자
5. SQL 오류 (1146): Table 'schema.codes' doesn't exist
SELECT *
FROM coda A INNER JOIN detail_code B ON A.code_id = B.code_id
테이블이 존재하지 않을 때 발생하는 오류다.
보통 잘못입력했을 때 오류가 난다.
6. SQL 오류 (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM code A, com_detail B
WHERE A.ID='A' AND A.ISUSE = "Y"' at line 7
SELECT A.ID,
A.NAME,
A.CONTENT,
A.ISUSE,
IFNULL(A.DATE,1)
A.REGIST_DATE, -- 끝에 콤마 (,) 가 붙어있다.
FROM code A, code_detail B
WHERE A.ID='ASTY' AND A.ISUSE = "Y";
SELECT A.*
,SELECT -- 키워드로된 컬럼을 조회할 때
-- 키워드는 `컬럼 명` 으로 입력해야한다.
FROM com_code A INNER JOIN com_detail_code B ON A.code_id = B.code_id
AND A.CODE_ID='ASTY'
SELECT *
FROM code A
INNER JOIN detail_code B ON A.id = B.id
AND A.ID='ASTY'
ORDER BY A.ID -- GROUP BY 라인과 순서가 바꼈다.
GROUP BY A.ID
위 예제 쿼리와 같이 왠만한 쿼리 구문 오류는 다음과 같은 오류를 내뱉는다.
하지만 항상 찾고나면 허무한 오류가 해당 오류다.
아주 사소한 부분에서 많이 볼 수 있기 때문에, SQL문을 작성할 때 신경쓰는 수 밖에 없다.예제의 쿼리들은 아주 짧은 문장으로 되어있지만 50라인 이상의 쿼리에서 해당 오류가 발생한다면 찾기 까다로울 수 있기 때문이다.
7. SQL 오류 (1062): Duplicate entry 'keyName' for key 'PRIMARY'
INSERT INTO detail_code VALUES ('A',1,"",NULL,"Y",null,null,null,null,NULL);
해당 오류는 기본키에 있는 데이터를 중복해서 넣을 경우 발생한다.
기본 키 값은 고유해야한다.
8. SQL 오류 (1222): The used SELECT statements have a different number of columns
SELECT id, name
FROM com_detail_code
UNION
SELECT id, code_name, isUse
FROM code
WHERE id ="P";
-- 유니온으로 묶여진 두 개의 SQL문의 컬럼 수가 일치하지 않음
UNION을 사용할 때에는 묶여진 두 개의 SQL문의 컬럼 수가 동일해야 한다.
위 오류는 동일하지 않을 경우 볼 수 있는 에러다.
'개발 > BACK' 카테고리의 다른 글
Understanding Java Reflection: A Comprehensive Guide (0) | 2024.07.08 |
---|---|
사람들이 많이 실수하는 개발 실수들 (0) | 2024.07.08 |
[JAVA] JAVA 8 구현 인터페이스 CompletableFuture를 통해 비동기 처리하기 (0) | 2023.10.31 |
[MariaDB] SQL 오류 (1242): Subquery returns more than 1 row (0) | 2023.10.26 |
[Tableau] 데이터 분석 툴 연동 방법 [개발자 VER] (0) | 2023.01.09 |