Consider the below SQL query
INSERT INTO [dbo].[PartnerCommissionData]
SELECT X.*
FROM
(
SELECT
cs.partner_id
,cs.quarter
,cs.year
,cs.partner_currency_amount
,p.partner_email
,cs.report_status_id
,Creation_dt = GETDATE()
FROM [dbo].[CommissionSummary] cs WITH(NOLOCK)
INNER JOIN [dbo].[Partner] p WITH(NOLOCK) ON p.partner_id = cs.partner_id
WHERE
cs.year = YEAR(@FirstDayOfQuarter)
AND cs.quarter = @Quarter
AND cs.report_status_id IN (1,2)
)X
WHERE
X.partner_id NOT IN (SELECT [Partner_Id] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.quarter NOT IN (SELECT [Quarter] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.year NOT IN (SELECT [Year] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.report_status_id NOT IN (SELECT [CommissionStatus_id] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
The filtering condition specified indicates that if the record already present in the PartnerCommissionData table, then it should not be inserted further. But as per me it’s a kind of nasty implementation.
WHERE
X.partner_id NOT IN (SELECT [Partner_Id] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.quarter NOT IN (SELECT [Quarter] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.year NOT IN (SELECT [Year] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
AND X.report_status_id NOT IN (SELECT [CommissionStatus_id] FROM [dbo].[PartnerCommissionData] WITH (NOLOCK))
How can we rewrite it in a better fashion?
Can we apply a merge or any other way….?
Thanks in advance
Can you do something like this ? Don’t need to left join (scanning another table).
assume partner_id, quarter , year , report_status_id need to convert to nvarchar