본문 바로가기

개발/DB3

[DB] 한 컬럼에 여러개의 결과 표현하기 쿼리 결과가 여러 줄인 데이터가 있다. 그런데 그중 한 컬럼의 내용반 다르고, 다른 컬럼의 결과는 똑같다. 그래서 내용이 다른 그 한 컬럼의 내용을 한 번에 받고 싶다. 이럴때 사용 할 수 있는 방법이 - oracle : LISTAGG(컬럼명 구분자) - mysql : GROUP_CONCAT(컬럼명 SEPARATOR 구분자) 함수를 이용하는 것이다. 두 함수 모두 지정 가능한 문자, 기호 등을 구분자로 하여 여려 행의 내용을 한 컬럼에 표기해 준다. oracle SELECT USER_ID, LISTAGG(USER_TASK, ',') WITHIN GROUP (ORDER BY USER_ID) AS USER_TASK FROM USER_TASK WHERE .... GROUP BY USER_ID 묶어야할 대상은 .. 2021. 7. 28.
[DB] WITH AS 문 사용하기 쿼리를 작성할때 과도한 서브 쿼리는 메인 쿼리의 더욱 복작하게 만든다. 이럴때 WITH AS 구문을 사용하면 그나마 복잡한 부분의 쿼리를 분리해 낼 수 있을 뿐만 아니라 반복적으로 쓰이는 서브 쿼리라면 성능의 향상을 덤으로 얻을 수 있다. 방법은 간단하다. 메인 쿼리 위에 WITH AS 구문을 사용해 서브 쿼리를 옮겨 놓는 것이다. WITH 이름 AS ( SELECT ... FROM ... WHERE ... ) SELECT .... FROM 이름 WHERE .... 서브쿼리가 여러개라 하더라도 걱정할 필요 없다. 각 서브쿼리를 , 로 구분하여 추가해 주면 된다. WITH 이름1 AS ( SELECT 문 ), 이름2 AS ( SELECT 문 ) SELECT ... FROM 이름1 LEFT OUTER JOI.. 2021. 7. 28.
DB2 에러 정리 SQLCODE : 104 SQLSTATE : 42601 문법이 올바르지 않을 경우 발생 SQLCODE : 204 SQLSTATE: 42704 테이블이 없을때 SQLCODE : 206 SQLSTATE : 42703 컬럼이 존재하지 않을때 SQLCODE : 302 SQLSTATE : 22001 컬럼 사이즈가 문자열의 길이 보다 작을때... SELECT 에서 발생하는 경우가 있다. 특히 ORDER BY 를 조회 할때 페이지 사이즈가 작기 때문에 발생하는 경우가 있는데 (ORDER BY를 생략해 주면 에러가 안난다.) 이럴때 페이즈 사이즈를 늘려 주거나, 읽어 오는 데이터의 길이를 제한해야 한다. SQLCODE : 405 SQLSTATE : 42820 숫자 상수가 너무 길거나, 그 값이 해당 데이터 유형의 범위.. 2021. 4. 16.