2023/03/29- 2023/03/30

최현우·2023년 3월 30일

업무/개발일지

목록 보기
52/134
post-thumbnail

일 내용

- MotionBoard의 SQL 수정

SQL 수정의뢰였는데 수정 내용은 다음과 같았다.

기존 쿼리 A에 a,b,c 3개의 테이블을 조인한 쿼리가 Union으로 연결되어 있다.
이때 출력에 매인이 되는 a테이블에 데이터가 있는경우는 기존 결과와 같은값이 나오게 하고, 데이터가 없는 경우는 a테이블을 무시한 나머지 테이블에서 데이터를 표시.

처음에 이해가 안돼 고민했는데, 생각해보면 간단하다.

c#이였다면 if문을 써서 기존 값을 검색한 결과의 count <1이런식으로 해서 쿼리를 실행 할텐데, 어떻게 해야할지 물어볼 사람도 없어 답답한 상태로, 멘붕에 빠져있었다....

역시 항상 느끼는 거지만, 코딩,쿼리가 어려운건 어떻게든 해결할 수 있다... 단지 내가 이해를 못하고 있거나, 너무 어렵게 생각해 돌아가고 있던거다.

해결방법은 UNION ALL WHERE EXISTS를 이용하여 해결하였다.
1. 기존 데이터값이 존재하면 그대로 출력이기 때문에 기존 쿼리는 냅둔다.
2. UNION ALL을 이용해, 메인이 되는 테이블을 바꾸었다.
기존에 있던 a테이블은 없애고, 조건식에 b,c를 이용한 쿼리를 만들었다.
3. WHERE NOT EXISTS안에 서브쿼리로 a테이블의 조건을 집어넣었다. SELECT 1 FROM a WHERE 조건 이런식으로 값을 넣으면, 존재할때는 출력하지 않고, 존재하지 않을경우 출력하기 때문에, 기존 쿼리 결과에 따라 데이터 출력을 바꿀 수 있다!

profile
세상에서 가장 귀여운건 == 윤호 ? True : False 언제나 True❤️

0개의 댓글