2013-08-15 1 views
-2

약 5 개의 테이블을 조인하고 모든 결과를 표시하는 쿼리가 있습니다. 레코드는 웹 애플리케이션에 약 70000 개의 항목이 있어야하지만,이 작업을 수행하면 MSSQL 2008에 51000 개의 항목 만 표시됩니다. 조인 기능을 사용하여 모든 70000 항목을 표시 할 수 있는지 궁금합니다. 내부 조인? 나는 join 함수에 대해 너무 많은 경험이 없으며 누군가가이 쿼리를 편집하여 5 개의 테이블에있는 모든 엔트리를 표시하기를 희망했다. 나는 이것이 전문가의 progammer를위한 빠른 수정 인 것을 알고 있으며, 나는 시간과 노력을 미리 감사한다. 건배SQL에서 조인 함수

기존 쿼리 :

select SerialNum as [Serial Number],ts_sitename As Site,(case m.Scratched 
    when 0 then 'Live' 
    when 1 then 'Free' 
    END) as Status, Note as Comment, 
    SUBSTRING(cast(EffectiveDate as char), 1, 8) AS [Effective Date Added], 
    SUBSTRING(cast(EffectiveDate as char), 10, 6) AS [Effective Time Added], 
    SUBSTRING(cast(ScratchedDate as char), 1, 8) AS [Scratched Date], 
    SUBSTRING(cast(ScratchedDate as char), 10, 6) AS [Scratched Time], 
    SUBSTRING(cast(ChangedPurgeDate as char), 1, 8) AS [Purge Date], 
    SUBSTRING(cast(ChangedPurgeDate as char), 10, 6) AS [Purge Time], 
    fl_filename as Dataset, hs_hostname,UserCode 
    from (((((Media m join TheSites_tab s on m.SiteId = s.ts_sitenum) 
    join MediaGenT g on m.MediaId = g.mg_medianum) 
    join TheHosts_tab h on mg_hostnum = h.hs_hostnum) 
    join TheFiles_tab f on mg_filenum = f.fl_filenum) 
    join [User] u on mg_usernum = u.UserId) 
    join Note n on m.NoteId = n.NoteId 
    where Destroyed = '0'; 
+0

당신의 데이터에 대해 더 많이 알지 못하면 오직 OUTER JOIN을 사용하는 것이 좋습니다. 더 많은 것을 돕기 위해 어떤 테이블에 70000 개의 행 (Media입니까?)이 있는지 공유하십시오. – amrith

+0

이것은 추측 일 뿐이지 만 Notes가 반드시 Media 테이블에 존재하지 않는다고 생각하기 때문에 Note 테이블을 LEFT JOIN해야합니다. 노트에 LEFT JOIN을 사용하면 메모가없는 경우에도 미디어에서 모든 행을 가져옵니다. – Dan

+0

@Dan은 답변으로 게시 할 수 있으므로 시험해 보겠습니다. –

답변

0

이 같은 시도하지만, 교차에 따라 조인 INNER JOIN, 대신의 JOIN

select SerialNum as [Serial Number],ts_sitename As Site,(case m.Scratched 
    when 0 then 'Live' 
    when 1 then 'Free' 
    END) as Status, Note as Comment, 
    SUBSTRING(cast(EffectiveDate as char), 1, 8) AS [Effective Date Added], 
    SUBSTRING(cast(EffectiveDate as char), 10, 6) AS [Effective Time Added], 
    SUBSTRING(cast(ScratchedDate as char), 1, 8) AS [Scratched Date], 
    SUBSTRING(cast(ScratchedDate as char), 10, 6) AS [Scratched Time], 
    SUBSTRING(cast(ChangedPurgeDate as char), 1, 8) AS [Purge Date], 
    SUBSTRING(cast(ChangedPurgeDate as char), 10, 6) AS [Purge Time], 
    fl_filename as Dataset, hs_hostname,UserCode 
    from (((((Media m join TheSites_tab s on m.SiteId = s.ts_sitenum) 
    OUTER JOIN MediaGenT g on m.MediaId = g.mg_medianum) 
    OUTER JOIN TheHosts_tab h on mg_hostnum = h.hs_hostnum) 
    OUTER JOIN TheFiles_tab f on mg_filenum = f.fl_filenum) 
    OUTER JOIN [User] u on mg_usernum = u.UserId) 
    OUTER JOIN Note n on m.NoteId = n.NoteId 
    where Destroyed = '0'; 
+0

그러면 13 행에 오류가 발생합니다. msg 156, 수준 15, 상태 1, 줄 13 키워드 'JOIN'근처의 구문이 잘못되었습니다. –

0

JOIN 키워드를 사용 단독 기본값에 OUTER JOIN를 사용합니다.

데이터 세트에 대해 많이 알지 못하지만 제외하지 말아야 할 데이터를 제외하는 경우 더 포괄적 인 가입을 사용해야합니다. JOIN 키워드를 OUTER JOIN 초로 대체하십시오.

W3 Schools 하나가 가장 적합한 알아낼에 대한 JOIN 의미를 배우기위한 좋은 자원이며, 또한 당신이 더 편안하게 할 수 JOIN 문 자신의 다른 종류를 시도 할 수 있습니다.