중첩 된 INNER JOIN
문이 없도록 변경하려는 SQL 쿼리에 다음과 같은 INNER JOIN
문이 있습니다. 나는이 결과가 수천 행을 반환하는 데 20 + 분이 걸리기 때문에 이것이 데카르트 제품을 야기한다고 믿습니다. 누군가가 중첩을 제거하는 방법을 알아낼 수 있습니까? 여기도움이 필요 중첩 된 내부 조인 제거
INNER JOIN supt_oper_anls_dw.dbo.TECH_INCDT_V
과 :
SELECT
TECH_INCDT_V.INCDT_NUM_I AS [Incident Number],
TECH_INCDT_V.ASGN_TO_USER_I AS [Incident Assigned User ID],
SVY_RESP_V_3.RESP_VAL_Q AS [Survey Response],
SVY_QUES_V_3.QUES_T AS [Survey Question]
FROM supt_oper_anls_dw.dbo.SVY_QUES_V AS SVY_QUES_V_7
INNER JOIN supt_oper_anls_dw.dbo.SVY_RESP_V AS SVY_RESP_V_7 ON SVY_QUES_V_7.SVY_QUES_I = SVY_RESP_V_7.SVY_QUES_I
-->START INNER JOIN "A"
INNER JOIN supt_oper_anls_dw.dbo.TECH_INCDT_V
-->These are NESTED within the INNER JOIN "A" in the previous line
INNER JOIN supt_oper_anls_dw.dbo.PERS_V ON TECH_INCDT_V.CRTE_USER_I = PERS_V.PERS_LAN_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_TASK_V ON TECH_INCDT_V.INCDT_NUM_I = SVY_TASK_V.INCDT_NUM_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_INSTC_V ON SVY_TASK_V.SVY_INSTC_I = SVY_INSTC_V.SVY_INSTC_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_RESP_V ON SVY_INSTC_V.SVY_INSTC_I = SVY_RESP_V.SVY_INSTC_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_QUES_V ON SVY_RESP_V.SVY_QUES_I = SVY_QUES_V.SVY_QUES_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_TASK_V AS SVY_TASK_V_3 ON TECH_INCDT_V.INCDT_NUM_I = SVY_TASK_V_3.INCDT_NUM_I AND SVY_INSTC_V.SVY_INSTC_I = SVY_TASK_V_3.SVY_INSTC_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_RESP_V AS SVY_RESP_V_3 ON SVY_INSTC_V.SVY_INSTC_I = SVY_RESP_V_3.SVY_INSTC_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_QUES_V AS SVY_QUES_V_3 ON SVY_RESP_V_3.SVY_QUES_I = SVY_QUES_V_3.SVY_QUES_I
INNER JOIN supt_oper_anls_dw.dbo.SVY_TASK_V AS SVY_TASK_V_7 ON TECH_INCDT_V.INCDT_NUM_I = SVY_TASK_V_7.INCDT_NUM_I AND SVY_INSTC_V.SVY_INSTC_I = SVY_TASK_V_7.SVY_INSTC_I
-->Nesting ends here
-->END INNER JOIN "A"
ON SVY_RESP_V_7.SVY_INSTC_I = SVY_INSTC_V.SVY_INSTC_I
INNER JOIN supt_oper_anls_dw.dbo.PERS_V AS PERS_V_2 ON SVY_INSTC_V.CMPL_BY_USER_I = PERS_V_2.PERS_LAN_I
LEFT OUTER JOIN supt_oper_anls_dw.dbo.ACCT_DATE_DIM AS ACCT_DATE_DIM_OPEN ON CONVERT(varchar(8), TECH_INCDT_V.CRTE_TS, 112) = ACCT_DATE_DIM_OPEN.GREG_D
LEFT OUTER JOIN supt_oper_anls_dw.dbo.ACCT_DATE_DIM AS ACCT_DATE_DIM_SVY ON CONVERT(varchar(8), SVY_INSTC_V.CMPL_TS, 112) = ACCT_DATE_DIM_SVY.GREG_D
WHERE
(SVY_QUES_V.SVY_QUES_I IS NOT NULL) AND
(TECH_INCDT_V.CRTE_WKGRP_N LIKE '%FAKE%' OR TECH_INCDT_V.CRTE_WKGRP_N IS NULL)
GROUP BY
TECH_INCDT_V.INCDT_NUM_I,
TECH_INCDT_V.ASGN_TO_USER_I,
SVY_RESP_V_3.RESP_VAL_Q,
SVY_QUES_V_3.QUES_T,
SVY_QUES_V_3.SVY_QUES_I,
TECH_INCDT_V.CRTE_TS
나는 INNER 여기 사이에 문을 가입 중첩을 제거하려고하지있어이
ON SVY_RESP_V_7.SVY_INSTC_I = SVY_INSTC_V.SVY_INSTC_I
전체 SQL – navigator
을 게시하십시오. 'INNER JOIN supt_oper_anls_dw.dbo.TECH_INCDT_V' 앞에 ON 문이 없습니다. 이것이 왜 당신이 데카르트 제품을 얻는 이유입니다. 테이블을 올바른 방법이나 순서로 조인해야합니다. DB 스키마를 알지 못하면 조인이 어떻게 발생해야하는지 파악할 수 없습니다. – navigator
아무것도 없습니다. 쿼리는 그대로 정상적으로 실행됩니다. –