안녕하세요
쿼리 조인해서 셀렉트 해야 하는데 결과값이 잘 나오지 않아서 문의드립니다.
실행해야 하는 구문은
data 테이블에는 대략 300만건이 있는데
그중에 50995건은
work 테이블에 work_no 에 물려 있는 데이터 입니다.
그 50995 건을 뽑고 , baring_cnt가 null이 몇개인지 뽑아야 하는데
조인을 잘 걸었다고 생각하는데도 계속 값이 20만건이 넘게 나와서 질문드립니다.
그리고 아래는 테이블, 컬럼, 데이터 구조입니다.
select * FROM data
-- 컬럼
data_seq
file_seq
baring_title
baring_cnt
-- 데이터
data_seq | file_seq | baring_title | baring_cnt
1 1 작업량 null
2 2 작업량 10
3 3 작업량 15
4 4 작업량 null
5 5 작업량 null
.
.
.
50995 50995 작업량 null
select * FROM file
-- 컬럼
file_seq
project_seq
-- 데이터
file_seq | project_seq
1 1
2 1
3 1
4 1
5 1
.
.
.
50995 1
select * from project
-- 컬럼
project_seq
title
-- 데이터
project_seq | title
1 | 베어링 작업자
select * FROM folder
-- 컬럼
folder_seq
project_seq
static_key
-- 데이터
folder_seq | project_seq | static_key
1 1 bcd202108311154512
select * FROM work
-- 컬럼
work_no
project_seq
-- 데이터
work_no | project_seq
1 1
2 1
select * FROM workFolder
-- 컬럼
work_no
folder_seq
static_key
-- 데이터
work_no | folder_seq | static_key
1 1 bcd202108311154512
2 7 etf202108311024231
네 맞습니다.
project하나에 여러개의 work를 등록하고
그 work에 파일을 등록해서 작업하는 방식으로 되어있습니다..
우선적으로 목록을 뽑으려고 하는데
work 등록일시 / work 제목 / baring_title(작업총수량) | baring_cnt(작업진행수량)
이렇게 하려고 하는데요 baring_cnt가 null 이 아닌갯수를 카운트하려고 합니다.
그럼 work명을 기준으로 data와 file 테이블을 조인한 후에
folder 테이블과 file 테이블에서 에서 static_key를 조회한걸
work 테이블과 workFolder 테이블로 조회 후
data 테이블에 있는 baring_cnt 컬럼을 in null로 가는 방향이 맞는지 궁금합니다.
관계가 있는 모든 테이블들이 조인에 참여할 필요는 없습니다.
목적 달성을 위해 필요한 최소한의 테이블만 사용하시면 됩니다.
그리고, 각 테이블의 참조 관계가 좀 이상합니다.
각 테이블의 기본키, 참조키 등이 위에 제시한 그대로 맞나요?
SELECT a.work_no , b.baring_cnt FROM work a , file b , data c WHERE a.project_seq = b.project_seq AND b.file_seq = c.file_seq AND c.baring_cnt IS NOT NULL -- AND c.baring_cnt > 0 -- 혹시 이게 맞는 게 아닌지? ;