반응형
Mysql 별칭을 where에서 사용하는 방법
Select List 쿼리중에서 서브쿼리로 별칭을 만들어서 사용하려했지만 계속해서 에러가 나타납니다..
에러문구는 언제봐도 정이 안가네요…
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cs_state_name' in 'where clause'
한마디로 별칭을 인식하지 못하는 겁니다.
그래서 구글링으로 이리저리 찾아봤지만 해결책중 2가지 경우가 있었습니다.
1. Where절 대신 Having절 사용
2. from문에서 서브쿼리한 다음 별칭 사용
하지만 workbench에서는 실행이되는대도 불구하고 프로그램에서는 인식하지 못했습니다.
그래서 지인에게 물어봐서 해결한 해결 방법을 밑에서 정리해 보았습니다.
1. From 뒤에 서브쿼리로 감싸서 별칭한다.
2. where에서는 별칭을 사용하지 않고 조건을 사용한다.
이렇게 말로만 정리하면 잘 모르니 코드로 정리해보겠습니다.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<select id="List" parameterType="ListVO" resultType="ListVO">
SELECT
*
FROM
(SELECT
*
,(select name from tbl_common where num = '74' and type='1' and state = code) as state_name
,(select name from tbl_common where num = '78' and type='2' and state = code) as state_name2
,(select name from tbl_common where num = '82' and type = code) as cs_type_name
FROM ListVO) as x
where
1=1
<if test="search != null and search !=''">
<![CDATA[
AND #{search} = (select name from tbl_common where num = '74' and type='1' and state = code) // 별칭말고 조건 적용
or #{search} = (select name from tbl_common where num = '78' and type='2' and state = code) // 별칭말고 조건 적용
]]>
</if>
<![CDATA[
Order by cs_idx desc
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
|
cs |
JSP (검색 SELECT BOX)
조건이 두가지기에 중첩 조건을 사용하였더니 적용이 되더라구요..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<div class="form-group">
<label class="control-label" for="">진행상태</label>
<select id="search" name=search style="width:150px" class="form-control">
<option value="">선택</option>
<c:forEach var="list" items="${selectList}" varStatus="status">
<option value="${list.state_name} ${list.state_name2}"
<c:choose>
<c:when test="${searchVO.search eq list.state_name}">
selected
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${searchVO.search eq list.state_name2}">
selected
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
>${list.state_name}${list.state_name2}</option>
</c:forEach>
</select>
</div>
|
cs |
반응형
'Database' 카테고리의 다른 글
Mysql 디비 백업 방법(전체함수까지 백업) (0) | 2020.10.02 |
---|---|
Mysql Character set = utf8 설정 방법 (0) | 2020.10.02 |
Mysql 콘솔 접속 방법 및 명령어 (0) | 2020.09.22 |
Mysql Character set = utf8 설정 (0) | 2020.09.10 |
[Database]CRUD DB 명령문과 예제 (0) | 2020.09.07 |
댓글