이 문제를 쿼리만으로 해결 가능한지 문의드립니다. 0 2 518

by 건페르시 [SQL Query] [2021.06.07 14:11:24]


도저히 제 실력으로 해결하기가 힘들어 문의드립니다...

쉽게 우편(보내는)시스템의 예를 들어서

A테이블: 우편자체에 대한 테이블(X칼럼을 KEY)

B테이블: 발송정보 테이블

C테이블: 수신사정보 테이블

D테이블: ~~

이런식으로 있다고 가정했을때 한 우편을 100군데 보낸다고 하면 A테이블에는 1ROWS가 나머지 B,C,D테이블에는 100ROWS가 추가됩니다.(전부 A테이블의 X칼럼을 포함) 정상적으로 100ROWS씩 쌓이면 문제가 안되는데 거래량이 많아서 그런지 빠지는것이 있어 빠지는 것을 찾으려고 합니다.

그래서 시스템 사정상 B,C,D 테이블에서 ROWS를 카운트하여(조건은 A테이블의 X칼럼 값인걸) 하나라도 다르다면 이것을 반환하려고 하는데.... 여기서 문제는 확인해야하는 A테이블의 ROWS가 N개입니다. 이걸 쿼리로 찾을수 있을까요??

정리

1.A테이블에서 특정조건에서 값 추출 > N개

2.KEY값인 X칼럼으로 각 B,C,D테이블을 카운트

3.카운트 값이 하나라도 다르면 반환

 

by 뉴비디비 [2021.06.07 22:14:29]

대략 이런 쿼리를 의도하시는 건지 ? 

SELECT 
	A.xkey, COUNT(colB) , COUNT(colC) , COUNT(colD)
FROM 
	A
LEFT JOIN (
    -- colB, colC, colD 는  B, C, D 구별용 임의 칼럼 
	SELECT xkey, 'B'  AS colB, NULL AS colC, NULL AS colD FROM B
	UNION ALL
	SELECT xkey, NULL AS colB, 'C'  AS colC, NULL AS colD FROM C
	UNION ALL
	SELECT xkey, NULL AS colB, NULL AS colC, 'D'  AS colD FROM D
) BCD ON A.xkey = BCD.xkey
-- WHERE A.특정조건
GROUP BY A.xkey
HAVING NOT ( COUNT(colB) = COUNT(colC) AND COUNT(colC) = COUNT(colD) AND COUNT(colB) = COUNT(colD) )

 


by 건페르시 [2021.06.08 11:08:08]

정말 감사합니다.. 아직도 이해중이지만 생각했던 결과값이 나오고 있습니다. 감사합니다..

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