연우, 장을 열다.

이건 좀 어이없어서... ㅋㅋㅋ 메모합니다. 



말 그대로입니다. mysql 이 넘이, "나는 컬럼 fail_cnt를 못찾겠어 ㅠㅠ "

라고 하는겁니다. 


 select 

  count(CASE WHEN rt_flag=0 THEN 1 END) as fali_cnt ,

count(CASE WHEN rt_flag=1 THEN 1 END) as succ_cnt ,

count(CASE WHEN rt_flag IS NULL THEN 1 END) as null_cnt 

from tbl_trn_return_list where org_mkprd_idx='MKH20171208114012'


위처럼 조회를 했는데 


왜!! 자꾸 없다고 나오는지, 



실수는 여기부터였습니다. 



위처럼 쿼리를 짜놓고, 


 stmt = conn.prepareStatement(sql);

rs = stmt.executeQuery();

rs.next();

result = rs.getInt("succ_cnt")+"|"+rs.getInt("fial_cnt")+"|"+rs.getInt("null_cnt");


위 처럼.. 불러왔습니다. 



잘 보시면,  rs.getInt(""); 여기 안에 들어가는 컬럼명을 잘못 적은겁니다.


쉬운건데.. 당연히 나와야 하는건데... 안나오니까 참 ㅋㅋㅋㅋ 




여러분들도 혹시 저처럼 이런 에러를 만나면!  아 어디 분명오타가 있구나 생각해보십시오.. :) ㅋㅋㅋ 


-- 쿼리를 직접 사용
SELECT (LENGTH(v) - LENGTH(REPLACE(v, ';'''))) / LENGTH(';')
FROM (SELECT 'A;B;C;D;E;F;G' v) A;
 
 
-- 함수를 만들어 사용해도 편리함
CREATE FUNCTION COUNT_STR(X VARCHAR(255), DELIM VARCHAR(12))
   RETURNS INT
RETURN (LENGTH(X) - LENGTH(REPLACE(X, DELIM, ''))) / LENGTH(DELIM);
 
 
SELECT COUNT_STR(TEXT, ';') CNT
FROM (SELECT 'A;B;C;D;E;F;G' TEXT) A;

출처 : http://www.seobangnim.com/zbxe/DB/603393



위 커뮤니티에서 가져왔습니다. 


위처럼 쿼리 적용을 해보니, 찾는 문자열이 몇개가 해당 컬럼에 포함돼있는지 알수 있었습니다. 


제 케이스는 컬럼이 모두 "ㅁㅁㅁ|ㅍㅍㅍ|ㅇㅇㅇ" 이런 형식으로 데이타들이 들어가 있었어요. 전 '|' 이것이 몇개나 되는지 알고 싶었구요. 

그래서 아래와 같이 정보를 얻었습니다. 

 







이런 생각해본적 있으실겁니다.

특정 table A에다가 table B의 내용을 모두 집어 넣어버리고 싶은 적


테이블들의 관계에 따라서 특정 테이블 B의 내용을 temp 형식으로 모두 복사해 넣고싶은 상황일 수 있어요. 


내용을 조회해서 와서 바로 인썰트 하는 방법이 있습니다. 


table A

id    |    addr    |    gender

--------------------------------

no rows




table B 

id    |    name    |    addr    |    gender

------------------------------------------------

a        김길수        서울시        남

b        김민경        부천시        여

c        나소민        인천시        여


위처럼 테이블이 존재한다면, 


insert into table A select id, addr, gender from table B


라고 하면 됩니다. table A의 컬럼 순서와 동일하게 값을 불러와야만 적용이 됩니당