이번 주 목표
프로젝트 완성
오늘 목표
프로젝트 오류 해결
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 |