쿼리 제거 할 방법 : 여기내가 중복 레코드
Select table_c.id_number, table_c.name, table_s.site_name,table_co.Contract_name
FROM table_c , table_s, table_m, table_o, table_a, table_con
WHERE
table_s.objid = table_c.sobjid
AND table_m.cobjid (+) = table_c.objid
AND table_o.objid (+) = table_m.olobjid
AND table_a.objid (+) = table_o.aobjid
AND table_co.objid (+) = table_a.conobjid;
내가 6 개 테이블이 있습니다. table_c와 table_s에는 하나의 2 가지 관계가 있습니다. 그것은 가능한 1 table_o 레코드에 대해 우리는 2 table_c 레코드를 가질 수 있습니다 또는 레코드가 될 수 있습니다. 내가 table_c 및 table_s 테이블과 함께 SELECT에서 table_co 값을 가져 가야하기 때문에, 나는 모든 테이블에 조인을 사용했습니다 table_c-> table_m- > table_o-> table_a-> table_co.
이제이 쿼리를 실행하면 중복 레코드가 생깁니다. table_c에 수백만 개의 레코드가 있습니다. 따라서 중복 레코드를 제거하기 위해 distinct 또는 Union ALL을 사용하면 쿼리가 매우 오랜 시간이 걸릴 수 있습니다.
성능 문제없이 고유 한 레코드를 제공하는 방식으로이 쿼리를 올바르게 처리 할 수 있습니까?
이 쿼리는 외부 시스템에서 데이터를 가져 오기 위해 사용하는 sql 뷰의 일부입니다.
미리 감사드립니다.
명시 적 조인 구문을 사용하여 쿼리를 다시 작성하십시오. –
팀 가입 구문에 동의하면 관계가 명확하지 않아 문제를 쉽게 해결할 수 있습니다. http://www.w3schools.com/sql/sql_join_inner.asp는 newr 개념 인 경우 내부 결합에 관한 기사입니다. 지금 당장 볼 수있는 한 가지 문제는 다른 테이블에 대해 table_s에 대해 정의 된 관계가 없다는 것입니다. 이는 크로스 조인을 생성하고 아마도 성능에 따른 고유 그룹 또는 그룹이 왜 불량한지를 보여주는 많은 수의 중복을 반환한다는 것을 의미합니다. – Matt
안녕하세요 @ Matt/@ Tim, 나는 또한 명시 적 조인 (내부/왼쪽 외부 조인)을 사용하고 쿼리를 다시 작성하라는 제안에 동의합니다. 또 다른 요점은 table_s가 table_c와 one2one 관계가 있고 table_c가이 쿼리의 주요 테이블이기 때문에 table_s가 중복 레코드의 이유라고 생각하지 않습니다. 감사합니다 - – HelloFriends