에러

SQL 문제 <서브 쿼리를 공부하자...>

NEWDODORIPYO 2022. 6. 7. 21:40

SQL 문제

에러발생 원인

question 이라는 테이블에 category라는 컬럼으로 ‘Q’일때는 A게시판에 보여지고 ‘R’일때는 B게시판에 데이터가 보여지게 설계를 했고 게시판에서 리스트 뽑아서 출력하는데 까지는 성공했다

<select id="admquestionList" resultType="com.sync.domain.Report">
        select tbl_question.q_id, tbl_question.adm_id, tbl_question.m_id, ta.name, tbl_question.title, tbl_question.content, tbl_question.category, tbl_question.regDate, tbl_question.replyCount, tbl_question.mainImage
        from tbl_question left join tbl_admin ta on tbl_question.adm_id = ta.adm_id where category = 'R'
        <include refid="search"></include>
        order by q_id desc
        limit #{skip},#{size}

여기서 <include>된 코드는 검색을 하기 위한 검색조건 where 문이다

검색조건 코드 

<sql id ="search">
        <where>
            <if test="keyword != null">
                <foreach collection="types" item="item" separator="OR" open="(" close=")">
                    <if test='item =="t"'>
                        title like concat('%' , #{keyword} , '%')
                    </if>
                    <if test='item =="c"'>
                        content like concat('%' , #{keyword} , '%')
                    </if>
                    <if test='item =="w"'>
                        writer like concat('%' , #{keyword} , '%')
                    </if>
                </foreach>
            </if>
        </where>
    </sql>

현재 화면 <리스트까지는 뽑아오는데 성공했다>

하지만 여기서 문제는 검색이었다

검색을하면 where 문이 2번사용되기에 에러가 발생한다 이걸 어떻게 해결할까….검색조건 where문 안에 category 를 추가해서 해보기도하고 이방법 저방법 다 시도해 보았지만 전부 에러창을 보고 말았다 ….하지만 아 왠지 서브쿼리를 이용하면 될거같은데….. 도통 어떤식으로 작성해야하는지 감이 안와 다음날 강사님에게 가보아야겠다…라고 생각할때 같이 수업을 받던 사람들에게 물어 보았고 그러다 한가지 해결법을 찾았다 이방법 역시 서브쿼리였고 수정된 코드는 이러하다

<select id="admquestionList" resultType="com.sync.domain.Question">
        select tbl_question.q_id, tbl_question.adm_id adm_id, tbl_question.m_id, ta.name, tbl_question.title title, tbl_question.content content, tbl_question.category, tbl_question.regDate, tbl_question.replyCount, tbl_question.mainImage
        from (select * from tbl_question where category = 'Q') tbl_question left join tbl_admin ta on tbl_question.adm_id = ta.adm_id
        <include refid="search"></include>
        order by q_id desc
        limit #{skip},#{size}
    </select>

시원하게 해결을 했지만 혹 또다른 방법이 있을수있으니 내일 강사님에게 다시한번 가보려고한다 더 좋은 방법이 있다면 그방법도 소개해보겠습니다 !!!!

'에러' 카테고리의 다른 글

swagger-ui 에러  (0) 2022.08.04
Spring Boot 의 _ (언더바) 문제  (0) 2022.06.15