쿼리 셀렉트 질문드립니다. 0 6 414

by 박준수 [2021.08.31 12:40:55]


안녕하세요

쿼리 조인해서 셀렉트 해야 하는데 결과값이 잘 나오지 않아서 문의드립니다.

실행해야 하는 구문은 

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 

 

 

by 마농 [2021.08.31 13:15:39]

5만건은 어떤 쿼리를 통해 나온 건가요?
20만건은 어떤 쿼리를 통해 나온 건가요?
왜 5만건이 나와야 한다고 생각한 건가요?


by 박준수 [2021.08.31 13:29:04]

점심시간이라 밖에있어서 폰으로작성하는점 죄송합니다 

data  테이블에 있는 300만건중

50995건은 크게보면 project 테이블이 있고 각각  work 테이블에서 개별 작업을 할당하는데요 그때 넣은데이터가 50995건입니다.

Work폴데에서 작업할당을 하면 data 테이블에 들어가는 구조로 되어있습니다

파일을 풀면 최상위 폴더는 folder 파일은 file테이블에 들어가는데 그거 50995건이고

별도 가공처리후 data 테이블에 들어가고있습니다


by 마농 [2021.08.31 14:18:04]

project 하나에 여러개 work 가 연결되고
project 하나에 여러개 file 이 연결되네요.
work 에 5만건이 있으면 file 엔 더 많은 자료가 있겟네요.(20만건?)


by 박준수 [2021.09.01 12:58:13]

네 맞습니다. 

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로 가는 방향이 맞는지 궁금합니다.


by 마농 [2021.09.01 13:33:44]

관계가 있는 모든 테이블들이 조인에 참여할 필요는 없습니다.
목적 달성을 위해 필요한 최소한의 테이블만 사용하시면 됩니다.
그리고, 각 테이블의 참조 관계가 좀 이상합니다.
각 테이블의 기본키, 참조키 등이 위에 제시한 그대로 맞나요?
 

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  -- 혹시 이게 맞는 게 아닌지?
;

 


by 박준수 [2021.09.01 14:03:53]

네 키본키와 참조키는 맞는데 아무리 봐도 좀 개발 진행중에 계속 설계가 바뀌고 갑자기 추가되고 그렇다 보니

조금 난해해서 질문드렸습니다 ..

그리고 baring_cnt는 최초 널값이라서 is null 로 표현했습니다 

감사합니다.

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