본문 바로가기

개발/BACK

[RDB MariaDB] 자주 실수하는 쿼리 오류들 모음

728x90

통계 데이터 추출을 위한 쿼리를 작성하거나 기능 개발을 위한 동적쿼리를 작성하는 등

데이터베이스 쿼리문을 개발할 때는 집중력이 점점 흐려진다...

 

 

뻔히 보이는 오류임에도 뇌를 고생시키다보면 보이던 것도 보이지 않고, 알던 것도 모르게 된다.

 

해당 포스팅에서 집중력이 흐려질 때 볼 수 있는 쿼리 오류를 정리한다.

 

 

 

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문의 컬럼 수가 동일해야 한다. 

위 오류는 동일하지 않을 경우 볼 수 있는 에러다.

 

 

 

 

 

728x90