본문 바로가기

verdantjuly/Today I Learned

TIL 20230722

728x90

이번 주 목표

프로젝트 완성

오늘 목표

프로젝트 오류 해결

Node.js 교과서 읽기

오늘 한 것

프로젝트 오류 해결

Node.js 교과서 읽기

1. 리뷰 안 쓴 예약만 불러오기

문제

아래의 쿼리문을 실행할 경우 soft delete된 데이터가 있는 경우 다시 리뷰를 작성하였을 때

soft delete 된 데이터를 포함하여 selector에 표시 된다.

 

ex)

1. 35, 36, 37 예약

2. 35, 36, 37 보임

2. 36 삭제

3. 36 재작성

4. 35, 36, 37 보임 (원래 35, 37만 보여야 함)

SELECT r.reservationId
        FROM Reservations AS r
        LEFT JOIN Reviews as v on r.reservationId = v.reservationId 
            WHERE r.petsitterId = :petsitterId AND r.userId = :userId AND r.deletedAt IS NULL AND (v.deletedAt IS NOT NULL OR v.reviewId IS NULL)
            GROUP BY r.reservationId
            ORDER BY r.reservationId

시도

COUNT를 통해 soft delete 된 리뷰와 전체 리뷰 데이터 수를 센다.

일치하는 경우 현재 작성된 유효한 리뷰가 없는 경우 이므로 reservationId를 selector에 보여 줘서 리뷰가 작성 가능하게 만들고

오차가 있는 경우, 즉 1만큼 차이가 나는 경우에는 삭제가 안 된 데이터가 1개 있는 것이므로 reservationId를 보여주지 않는다.

SELECT DISTINCT r.reservationId, COUNT(v.reviewId) AS "reviewData", COUNT(v.deletedAt) AS "reviewDeleted"
        FROM Reservations AS r
        LEFT JOIN Reviews as v on r.reservationId = v.reservationId 
            WHERE r.petsitterId = :petsitterId AND r.userId = :userId AND r.deletedAt IS NULL 
            GROUP BY r.reservationId
            ORDER BY r.reservationId

해결

막판에 죽다 살아났다... 아래는 해결 쿼리를 실행한 결과이다. 

알게된 것

COUNT 메서드를 통해 조건 값에 해당하는 데이터의 수를 비교하면 원하는 결과를 얻을 수도 있다. 

SQL은 데이터의 집합이므로 조건에 해당하는 데이터 개수를 세는 것이 관건인 것 같다. 


정리 

COUNT 메서드를 통해 조건 값에 해당하는 데이터의 수를 비교하면 원하는 결과를 얻을 수도 있다.

SQL은 데이터의 집합이므로 조건에 해당하는 데이터 개수를 세는 것이 관건인 것 같다. 

 

체크리스트

[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?

[ O ] 오늘을 평가하였을 때 주니어 개발자가 될 수 있겠는가?

 

KPT

Keep

끝까지 문제를 해결하려는 노력

Problem

너무 답이 없으면 포기하고 싶은 마음

Try

계속 도전하기 

소감

진짜 해결 못하는 줄 알았는데 인터넷 자료들을 참고하다가 반짝이는 생각이 났다....

주여....

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20230724  (0) 2023.07.24
TIL 20230723  (0) 2023.07.23
TIL 20230721  (0) 2023.07.21
TIL 20230720  (0) 2023.07.20
TIL 20230719  (0) 2023.07.19