SQL Left join duplicates (SQL 2008)

Status
Niet open voor verdere reacties.

davivos

Gebruiker
Lid geworden
15 jan 2010
Berichten
30
Goedemiddag,

Ik hoop dat iemand me kan helpen met het volgende.

We gebruiken de volgende query om 2 DB's in sync te krijgen:

SELECT
[target].[salesorderid] ,
[source].[Value]
--INTO #tmp
FROM salesorder [target]
INNER JOIN
( SELECT [target].[salesorderid], NULLIF
(
(select
top 1 [Task-at Address]
from NAV..[Waste Management Header] (nolock)
where [No_] = [target].[ordernumber] collate Latin1_General_CI_AI) , '''')
as [Value]

FROM [salesorder] (nolock) [target] ) [source] ON [target].[salesorderid] = [source].[salesorderid]
WHERE [target].[shipto_line1] <> convert(nvarchar(250), [source].[Value]) COLLATE latin1_general_cs_as OR ([target].[shipto_line1] is NULL AND [source].[Value] is NOT NULL) OR ([target].[shipto_line1] is NOT NULL AND [source].[Value] is NULL)

Door de opbouw van deze query gaat hij dus voor ieder record nogmaals een query runnen op de TOP 1 te vinden.
Echter gaat het hier om 100000 records dus dat kost veel te veel tijd.

Nu heb ik geprobeerd het via een left join op te lossen echter krijg ik dan duplicaat regels.
Ik gebruik daarvoor de volgende query:


SELECT
[target].[SalesOrderId],
[source].[value]
--INTO #tmp
FROM salesorder [target] INNER JOIN (

SELECT

[target].[salesorderid],

NULLIF( [Task-at Address] , '''') as value

from [salesorder] [target]

left join NAV..Waste Management Header] on
target.[OrderNumber] = NAV..Waste Management Header].[No_] collate Latin1_General_CI_AI


) [source] ON [target].[salesorderid] = [source].[salesorderid]

WHERE [target].[shipto_line1] <> convert(nvarchar(250), [source].[Value]) COLLATE latin1_general_cs_as OR ([target].[shipto_line1] is NULL AND [source].[Value] is NOT NULL) OR ([target].[shipto_line1] is NOT NULL AND [source].[Value] is NULL)

Heeft iemand een idee hoe ik dit kan oplossen of heb ik geen andere keuze dan top 1 te gebruiken.

alvast bedankt voor het meedenken;)

Gr Dave
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan