안녕하세요. 쿼리초보입니다. 초보적인 질문일 수 있습니다만 답변 부탁드리겠습니다.
1:n으로 연결되어 있는 두 테이블 tb1과 tb2가 있습니다. 키는 ky1, ky2, ky3라는 세개의 필드 입니다.
tb1에는 키 외에 spent라는 필드가 있으며, tb2에는 별도의 데이터 고유 번호인 sm1, sm2, sm3와 비용금액을 나타내는 cost라는 필드가 있습니다.
즉, tb1의 하나의 ky1, ky2, ky3 조합 튜플은 tb2의 n개의 데이터를 갖으며 이들은 특정 sm1, sm2, sm3를 갖고 있습니다. sm1, sm2, sm3의 조합은 다른 그룹(다른 ky1, ky2, ky3 조합)에는 중복되어 들어갑니다.
보여주고 싶은 것은 tb1.ky1, tb1.ky2, tb1.ky3, spent, sum(cost)입니다. 여기서 sum(cost)는 각 ky1, ky2, ky3들의 cost의 합입니다. 여기까지는 다음 쿼리문을 사용하여 보여주도록 하였습니다.
SELECT tb1.ky1, tb1.ky2, tb1.ky3, tb1.spent, sum(tb2.cost) FROM tb1 LEFT JOIN tb2 ON (tb1.ky1=tb2.ky1 AND tb1.ky2=tb2.ky2 AND tb1.ky3=tb2.ky3) GROUP BY tb1.ky1, tb1.ky2, tb1.ky3, tb1.spent;
그런데 이중 tb2에서 특정 sm1, sm2, sm3의 조합은 갖고 있지만 특정 조합은 갖고 있지 않은 데이터만 보여주고 싶습니다.
즉, tb2.sm1='11' AND tb2.sm2='22' AND tb2.sm3='33'과 NOT (tb2.sm1='00' AND tb2.sm2='00' AND tb2.sm3='00'인 조건을 추가로 넣고 싶습니다.
WHERE 절에 조건을 넣으면 제대로된 값이 안나오고, ON 절에 넣으면 그냥 전체하고 값이 갖게 나옵니다.
혹시 이를 검색할 수 있는 쿼리를 아시면 답변 부탁드리겠습니다. 감사합니다. |