-
[오라클] 1:1 질문과 답변 게시판 SQL 정리SQL 2023. 9. 30. 17:22반응형
프로세스 설명
- 답변은 한 번만 달 수 있다.
- 답변은 중복으로 달 수 없다.
- 목록에는 질문과 답변이 보여야함
테이블 생성
CREATE TABLE "BBS" ( "BNO" NUMBER, -- 게시판번호 "PNO" NUMBER, -- 부모 게시판번호 "ID" VARCHAR2(100 BYTE), -- 작성자 "REG_DATE" DATE, -- 작성일 "TITLE" VARCHAR2(255 BYTE), -- 제목 "CONTENT" VARCHAR2(255 BYTE) -- 내용 )
임시 데이터 생성
SET DEFINE OFF; Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (1,null,'제목1','test','내용1',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (2,null,'제목2','test','내용2',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (3,null,'제목3','test','내용3',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (4,null,'제목4','test','내용4',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (5,null,'제목5','test','내용5',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (6,null,'제목6','test','내용6',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (7,2,'제목2 > 답글','test','내용7',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (8,4,'제목4 > 답글','test','내용8',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (9,null,'제목7','test','내용9',to_date('23/09/30','RR/MM/DD')); Insert into BBS (BNO,PNO,TITLE,ID,CONTENT,REG_DATE) values (10,1,'제목1 > 답글','test','내용10',to_date('23/09/30','RR/MM/DD'));
데이터 형태
원하는 결과
[HAS_REPLAY] 컬럼은 현재 질문의 답변이 있는지 확인한다.
[TYPE]컬럼은 현재 row가 질문인지 답변인지 구분한다.
SQL문
SELECT BNO , PNO , TITLE , CONTENT , ( CASE WHEN PNO IS NULL THEN BNO ELSE PNO END ) AS SORT , ( SELECT DECODE(COUNT(*),1,'Y','N') FROM BBS AA WHERE AA.PNO = A.BNO) AS HAS_REPLY , NVL2(PNO,'답변','질문') AS TYPE FROM BBS A ORDER BY SORT ASC , PNO DESC;
pno 컬럼 기준으로 case문을 이용하여 sort라는 정렬 필드를 얻는다.
order by로 sort를 오름차순, 그 후 pno로 내림차순을 한다.
반응형'SQL' 카테고리의 다른 글
PROCEDURE 프로시저 끄적거리기 (CURSOR,RETURN) (0) 2024.03.24 SQL기초 DISTINCT, GROUP BY 차이 (0) 2024.03.03 MYSQL, MARIA 테스트 데이터 넣기 (0) 2020.07.27 조인 JOIN , 카운트 COUNT , 중복카운트 COUNT DISTINCT 예제 (0) 2020.05.04 MYSQL D-DAY 디데이 계산하기 (0) 2020.04.17