사용자 검색시 DCODE로 했던 부분을 코드 테이블과 조인으로 변경
- 원래소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <select id="AllEmployeeList" resultMap="EmployeeMapper" parameterType="map"> select UCODE,DCODE,ENAME,NAME,BIRTHDAY,PHONE,EXNUM,EMAIL,ADDRESS,BIREDAY, NOTE,DEPARTMENT,BIREDAY, DECODE(POSITION,'W_PO1','사원','W_PO2','선임','책임','관리자' ,'W_PO4','과장','W_PO5','차장','W_PO6','팀장','W_PO7','이사')AS POSITION, DECODE(PRESENT,'W_PE1','정상회원','W_PE2','대출정지','W_PE3','관리자')AS PRESENT from EMPLOYEE order by ${SIDX} <if test="SORD == ('asc')">ASC</if> <if test="SORD == ('desc')">DESC</if> </select> | cs |
코드테이블을 활용을 하지 않고 일단 DCODE로 바뀌에 해놨음
코드테이블과 조인을해서 SELECT를 해봅시당.
기본적인 조인문 활용
-사용자 검색 - 이름검색, 사원번호검색
1 2 3 4 5 | - 기존 <select id="userSearchDcode" resultMap="EmpSearchMapper" parameterType="com.eco.library.dto.Emp_SearchVo"> SELECT * FROM EMPLOYEE WHERE DCODE like '%'||#{DCODE}||'%' </select> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | - 조인문 <select id="userSearchDcode" resultMap="EmpSearchMapper" parameterType="com.eco.library.dto.Emp_SearchVo"> SELECT E.ENAME,E.NAME,E.DCODE,BIREDAY, DE.DESCRIPTION AS DEPARTMENT, PO.DESCRIPTION AS POSITION, PR.DESCRIPTION AS PRESENT FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E // 각각의 DESCRIPTION 과 매핑하기위해 코드테이블을 세번 조인함 WHERE PO.CODE = E.POSITION AND // 조인조건 PR.CODE = E.PRESENT AND DE.CODE = E.PRESENT AND DCODE like '%'||#{DCODE}||'%' // 검색조건 </select> | cs |
검색 조건이 하나일때는 그냥 AND 연산자 뒤에 검색조건을 추가해주면 된다.
그러나 검색조건이 하나이상이 되면은 각각에 데이터가 다 출력이 된다.
이렇게....
- 사용자 상세검색
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT E.ENAME,E.NAME,E.DCODE,BIREDAY, DE.DESCRIPTION AS DEPARTMENT, PO.DESCRIPTION AS POSITION, PR.DESCRIPTION AS PRESENT FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E WHERE PO.CODE = E.POSITION AND PR.CODE = E.PRESENT AND DE.CODE = E.DEPARTMENT AND DCODE ='444' or NAME ='아름' or ENAME ='아름' or PRESENT = 'DEPT03' or POSITION = 'W_PO2' or DEPARTMENT = 'W_PE1'; | cs |
- 결과값
이런일이 발생하게됨 ㅠㅜ 그래서 조인에대해서 검색을 겁나 하다가 ON을 알게됨
http://vaert.tistory.com/158 참조
ON 구문
· - 조인 조건을 지정 할 수 있다.
· - 모든 논리 연산 및 서브쿼리를 지정할 수 있다.
-- 테스트를 위해 scott유저에서 아래 insert문장을 실행시킨다.
SQL> INSERT INTO bonus(ename, job, sal) VALUES('SMITH','CLERK',500);
-- ON절 사용 예제 (multi-table joins)
SQL> SELECT e.empno, e.ename, e.sal
FROM emp e JOIN dept d ON (e.deptno=d.deptno)
JOIN bonus b ON (b.ename = e.ename)
WHERE e.sal IS NOT NULL
라고한다... 그래서 사용해보기로
- 사용자 상세검색 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT E.ENAME,E.NAME,E.DCODE,E.BIREDAY, DE.DESCRIPTION AS DEPARTMENT, PO.DESCRIPTION AS POSITION, PR.DESCRIPTION AS PRESENT FROM EMPLOYEE E JOIN CODE_TABLE PO ON (PO.CODE = E.POSITION) JOIN CODE_TABLE PR ON (PR.CODE = E.PRESENT) JOIN CODE_TABLE DE ON (DE.CODE = E.DEPARTMENT) WHERE E.DCODE like '%4%' or E.NAME like '%아름%' or E.ENAME like '%아름%' or DE.DESCRIPTION like '%DEPT03%' or PO.DESCRIPTION like '%W_PO2%' or PR.DESCRIPTION like '%W_PE1%'; | cs |
FROM 조인테이블1 JOIN 조인테이블2 ON (조인조건) JOIN 조인테이블3 ON (조인조건) 요렇게 ON 사용
※ 아마 등가조인인듯 (equi join) ※
결과값
ㅜㅜㅜㅜ 성공 ㅜㅜ
'개발 > 개인' 카테고리의 다른 글
사용자 정보수정 - 사원ID,사원번호 클릭시 알럿창 발생 (0) | 2016.11.16 |
---|---|
사용자 검색,상세검색 정렬 추가 (0) | 2016.11.16 |
사용자 정보조회 - 정렬 (MYBATIS $,IF문) , ON조인구문 활용 (0) | 2016.11.15 |
사용자 정보수정 - 삭제버튼 추가 (0) | 2016.11.11 |
사용자 정보입력 -사원번호,아이디 중복검사 (0) | 2016.11.10 |
댓글