SELECT 쿼리 질문드립니다. 0 1 1,663

by 호임 [MySQL] SELECT MYSQL 쿼리 [2022.06.02 16:21:04]


안녕하세요 쿼리 질문드리고 싶은게 있어 글 작성합니다!

<학생>

학생id 학생명
1 홍길동
2 임꺽정
3 장길산

 

 

 

 

 

<도서예약>

도서예약id 예약id 학생id 도서id 예약상태
1 1 1 1 예약완료
2 1 1 2 예약대기
3 2 2 3 예약완료
4 2 2 4 예약완료

 

궁금한 것은 현재 <도서예약> 테이블에서 예약id로 묶여있는 도서ID의 상태가 모두 예약완료인 리스트만 SELECT로 추출하는게 궁금합니다.

 

결과는 도서예약ID에서 1,2 번을 제외한 3,4번만 출력됩니다!


쉽게 설명하면 모든 상태가 완료인 리스트를 어떻게 불러오는지 잘 모르겠습니다ㅠㅠ

항상 여기서 도움을 많이 받지만 뭔가 쉽게 감이 잡히지가 않네요

감사합니다.

by 마농 [2022.06.02 16:58:02]
WITH 도서예약 AS
(
SELECT 1 도서예약id, 1 예약id, 1 학생id, 1 도서id, '예약완료' 예약상태
UNION ALL SELECT 2, 1, 1, 2, '예약대기'
UNION ALL SELECT 3, 2, 2, 3, '예약완료'
UNION ALL SELECT 4, 2, 2, 4, '예약완료'
)
-- 1. 분석함수 --
SELECT *
  FROM (SELECT 도서예약id, 예약id, 학생id, 도서id, 예약상태
             , COUNT(*) OVER(PARTITION BY 예약id) cnt1
             , COUNT(CASE 예약상태 WHEN '예약완료' THEN 1 END) OVER(PARTITION BY 예약id) cnt2
          FROM 도서예약
        ) a
 WHERE cnt1 = cnt2
;
-- 2. Self Join
SELECT a.*
  FROM 도서예약 a
  LEFT OUTER JOIN 도서예약 b
    ON a.예약id    = b.예약id
   AND b.예약상태 != '예약완료'
 WHERE a.예약상태  = '예약완료'
   AND b.예약상태 IS NULL
;

 

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