본문 바로가기

Database/MySQL

[MySQL] COUNT 함수 테이블의 Row 갯수를 구할때 사용SELECT COUNT(*)FROM TABLE_NAME ※ 특정 항목별 갯수 SELECT COUNT(CASE WHEN P.ORDER_STEP = 1 THEN 1 END) AS cntStep1, COUNT(CASE WHEN P.ORDER_STEP = 2 THEN 1 END) AS cntStep2, COUNT(CASE WHEN P.ORDER_STEP = 3 THEN 1 END) AS cntStep3FROM TABLE_NAME
[MySQL](Error) Error 1093 : You can't specify target table 'TABLE_NAME' for update in FROM clause MySQL의 경우 Oracle과 달리 UPDATE 나 DELETE시 자기 테이블의 데이터를 바로 사용 못해서 SQL실행 시 1093에러가 발생함 UPDATE TBL_TRD_PROD_INFO SET REC_TIME = CURRENT_TIME(), REC_ID = '1111' WHERE PROD_TRD_ID IN (SELECT PROD_TRD_ID FROM TBL_TRD_PROD_INFO WHERE ORDER_STEP != 0 AND ORDER_STEP = 2-1) - Sub Query를 하나 더 넣어서 임시 테이블을 만들어서 해결 UPDATE TBL_TRD_PROD_INFO SET REC_TIME = CURRENT_TIME(), REC_ID = '1111' WHERE PROD_TRD_ID IN (SELEC..
[MySQL] ROW_NUMBER Oracle에서 제공하는 ROW_NUMBER함수를 MySQL에서는 사용할 수 없어서 직접 구현해야 한다. ※ 번호SELECT @rownum:=@rownum+1 AS ROW_NUMBERFORM TABLE_NAME,(SELECT @rownum := 0) T - TABLE_NAME : 사용하는 테이블명- (SELECT @rownum := 0) : rownum 초기화- @rownum:=@rownum+1 : 증감 ※ 그룹별 번호 ORACLE은 하기와 같이 가능한 기능을 구현해야 한다. SELECT ROW_NUMBER() OVER(PARTITION BY COL_NAME1 ORDER BY COL_NAME2) AS RNUMFROm TABLE_NAME SELECT (CASE @vData WHEN COL_NAME1 THE..
[MySQL](Error) Every derived table must have its own alias SELECT 에서 발생하는 에러로 서브쿼리에 alias가 없어서 발생한다. (SELECT payNo FROM(SELECT IFNULL(MAX(PAY_NO), 0) + 1 AS payNo FROM TBL_PAYMENT_HIST WHERE EVT_NO = #{evtNo}) T 서브쿼리에 alias(ex: T)를 지정해주면 문제가 해결된다.
[MySQL] 문자와 숫자 등 타입 변환하는 연산자(cast) 데이터의 타입이 다른 경우에 발생하는 이슈에 대응하기 위한 연산자 ※ Data Type- DATETIME : 'YYYY-MM-DD HH:MM:SS'- DATE : 'YYYY-MM-DD'- TIME : 'HH:MM:SS'- CHAR : String- SIGNED : Integer(64bit), 부호 사용 가능- UNSIGNED : Integer(64bit), 부호 사용 불가- BINARY : binary String ※ 숫자를 문자로 변환SELECT CAST(1 AS CHAR(10)) AS testChar ※ 문자를 숫자로 변환SELECT CAST('1' AS SINGNED) AS testInt