0
아래에 CTE를 사용하는 쿼리가 있습니다. 나는 이것 이외의 접근법이 있는지 궁금해. 그래서 저는 그것을 리팩터링하는 조언을 모으고 있습니다. 어떤 조언을 해주십시오. 또는이 쿼리를 여러 번 사용하면이 쿼리를 사용해도 쿼리가 잘 보입니까?CTE를 사용하는 SQL 스크립트
DECLARE @ReportingInstanceID INT
SET @ReportingInstanceID=34
;WITH x AS (
SELECT [dbo].[tenant_Reporting_Instance].UserID
FROM [dbo].[tenant_Reporting_Instance]
WHERE tenant_Reporting_Instance.ReportingInstanceID = @ReportingInstanceID
), y AS (
SELECT [TRCCore].[dbo].[pr_Language].InvariantLanguageCultureCode
FROM [TRCCore].[dbo].[pr_Language]
JOIN [dbo].[tenant_User_Setting]
ON tenant_User_Setting.LanguageID = pr_Language.LanguageID
WHERE tenant_User_Setting.UserID IN (
SELECT UserID FROM x
)
), Default_User_Settings_CTE (RoundingTypeInvariantCode, AgingDateValue
, CurrencyLabel, JobZoneLinkTypeLabel, MatchPeriodLabel
, PayFrequencyLabel, PayTypeLabel)
AS (SELECT r.RoundingTypeInvariantCode ,
a.AgingDateValue ,
cur.CurrencyLabel ,
jz.JobZoneLinkTypeLabel ,
m.MatchPeriodLabel ,
pf.PayFrequencyLabel ,
pt.PayTypeLabel
FROM dbo.tenant_User_Setting s
JOIN TRCCore.dbo.pr_Rounding_Type r
ON r.RoundingTypeID = s.RoundingTypeID
JOIN dbo.tenant_Aging_Date a
ON a.AgingDateID = s.AgingDateID
JOIN TRCCore.dbo.translation_pr_Currency cur
ON cur.CurrencyID = s.CurrencyID
AND cur.LanguageCultureCode IN (SELECT InvariantLanguageCultureCode
FROM y)
JOIN dbo.translation_tenant_Job_Zone_Link_Type jz
ON jz.JobZoneLinkTypeID = s.JobZoneLinkTypeID
AND jz.LanguageCultureCode IN ( SELECT InvariantLanguageCultureCode
FROM y)
JOIN dbo.tenant_Match_Period m
ON m.MatchPeriodID = s.MatchPeriodID
JOIN dbo.translation_tenant_Pay_Frequency pf
ON pf.PayFrequencyID = s.PayFrequencyID
AND pf.LanguageCultureCode IN (SELECT InvariantLanguageCultureCode
FROM y)
JOIN dbo.translation_app_Pay_Type pt
ON pt.PayTypeID = s.PayTypeID
AND pt.LanguageCultureCode IN (SELECT InvariantLanguageCultureCode
FROM y)
WHERE s.UserID IN (SELECT UserID FROM x)
)
SELECT * FROM Default_User_Settings_CTE
예상대로 작동합니까? 그렇다면 귀하의 질문을 codereview.stackexchange.com으로 이동하여 개선을위한 조언을 얻으십시오. 그렇지 않은 경우이 쿼리에 어떤 오류가 발생했는지 설명하십시오. –
아하이 봐요. 감사. 나는 어떤 오류도 만나지 않았다. 내 질문 이외에 내 구현 이외의 다른 방법이 있습니다. 어쨌든, 당신이 추천 한 사이트에 제 질문을 올렸습니다. –
일부 DB의 경우 InvariantLanguageCultureCode의 'IN'을 'JOIN'으로 바꾸면 성능이 향상 될 수 있습니다. AFAICT는''pt','pf','jz'에서 LanguageCultureCode가 같을 필요가 없기 때문에 괄호를 사용하여 각 테이블에 대해'y'와 별도로 조인 할 수 있습니다. 단지' y'리스트. –