여러개의 쿼리 결과 한 행으로 붙이기 0 2 2,302

by 리치 [MySQL] select sql query [2018.06.04 17:42:46]


초보로서 궁금한데 확인할 길이 없어 질문을 드립니다.

용도는 게시판 상세보기 페이지에서 해당 글의 내용과 이전글, 다음글의 일부 정보, 리스트로 가기 버튼을 클릭했을 때 사용할 페이징 번호를 만들 현재글의 순서를 조회하는 것입니다.

* 해당글 상세정보
SELECT SEQ, NAME, EMAIL_ADDR, BIRTH, THUMB, PROFILE  from tbl_01_st_member where seq = 75;

* 이전글 일부 정보
SELECT SEQ as b_SEQ, NAME as b_NAME FROM tbl_01_st_member WHERE SEQ > 75 and IS_DELETE = 0 Order by SEQ ASC LIMIT 1;

* 다음글 일부 정보
SELECT SEQ as n_SEQ, NAME as n_NAME FROM tbl_01_st_member WHERE SEQ < 75 and IS_DELETE = 0 Order by SEQ DESC LIMIT 1;

* 리스트로 가기 버튼을 클릭했을 때 사용할 페이징 번호를 만들 현재글의 순서를 조회
SELECT count(SEQ) as COUNT FROM tbl_01_st_member WHERE SEQ< 75 and IS_DELETE = 0;

 


이 쿼리를 각각 실행해도 되겠지만, 현재 궁금한 건 위 4개의 쿼리문의 결과를 1개 행으로 확인하는 방법이 있는지 입니다.
* 원하는 컬럼순서 : SEQ, NAME, EMAIL_ADDR, BIRTH, THUMB, PROFILE, b_SEQ, b_NAME, n_SEQ, n_NAME, COUNT


제가 지금까지 확인한 정보로는 JOIN 이긴 하지만, JOIN은 조회되는 SELECT의 컬럼이 같이야 하더라구요.

by 마농 [2018.06.04 18:30:01]

서로 다른 목적의 자료를 굳이 합칠 필요는 없습니다.
집합의 건수가 제각각이라면 더더욱 조인해서는 안되구요.(다대다 조인(X))
다만 이경우는 건수가 1건으로 제한되므로 억지로 조인하는 것은 가능합니다.
 

SELECT *
  FROM (SELECT seq, name, email_addr, birth, thumb, profile
          FROM tbl_01_st_member
         WHERE seq = 75
        ) a
  LEFT OUTER JOIN
       (SELECT seq  AS b_seq
             , name AS b_name
          FROM tbl_01_st_member
         WHERE seq > 75
           AND is_delete = 0
          ORDER BY seq ASC
          LIMIT 1
        ) b
    ON 1=1
  LEFT OUTER JOIN
       (SELECT seq  AS n_seq
             , name AS n_name
          FROM tbl_01_st_member
         WHERE seq < 75
           AND is_delete = 0
          ORDER BY seq DESC
          LIMIT 1
        ) c
    ON 1=1
 INNER JOIN
       (SELECT COUNT(*) AS cnt
          FROM tbl_01_st_member
         WHERE seq < 75    -- 부등호 반대로 된게 아닌지 의심이 드네요?
           AND is_delete = 0
        ) d
    ON 1=1
;

 


by 리치 [2018.06.05 09:04:42]

일단은 저도 이런 방법이 옳은건 아닌거 같다고 생각 했지만 ^^ 궁금했거든요.

그래도 답변 주신 것으로 잘 해결 하였습니다. 감사합니다. ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입