Ich bekomme unterschiedliche Ergebnisse für die folgenden zwei Abfragen und ich habe keine Ahnung warum. Der einzige Unterschied ist, dass man IN hat und man gleich ist.Zwei fast identische Abfragen, die unterschiedliche Ergebnisse liefern
Bevor ich auf die Abfragen eingehe, sollten Sie wissen, dass ich einen besseren Weg gefunden habe, die Unterabfrage in einen gemeinsamen Tabellenausdruck zu verschieben, aber das macht mich immer noch verrückt! Ich möchte wirklich wissen, was das Problem in erster Linie verursacht, ich frage aus Neugier
Hier ist die erste Abfrage:
use [DB.90_39733]
Select distinct x.uniqproducer, cn.Firstname,cn.lastname,e.code,
ecn.FirstName, ecn.LastName, ecn.entid, x.uniqline
from product x
join employ e on e.EmpID=x.uniqproducer
join contactname cn on cn.uniqentity=e.uniqentity
join [ETL_GAWR92]..idlookupentity ide on ide.enttype='EM'
and ide.UniqEntity=e.UniqEntity
left join [ETL_GAWR92]..EntConName ecn on ecn.entid=ide.empid
and ecn.opt='Y'
Where x.UniqProducer =(SELECT TOP 1 idl.UniqEntity
FROM [ETL_GAWR92]..IDLookupEntity idl
LEFT JOIN [ETL_GAWR92]..Employ e2 ON e2.ProdID = ''
WHERE idl.empID = e2.EmpID AND
idl.EntType = 'EM')
Und die zweite:
use [DB.90_39733]
Select distinct x.uniqproducer, cn.Firstname,cn.lastname,e.code,
ecn.FirstName, ecn.LastName, ecn.entid, x.uniqline
from product x
join employ e on e.EmpID=x.uniqproducer
join contactname cn on cn.uniqentity=e.uniqentity
join [ETL_GAWR92]..idlookupentity ide on ide.enttype='EM'
and ide.UniqEntity=e.UniqEntity
left join [ETL_GAWR92]..EntConName ecn on ecn.entid=ide.empid
and ecn.opt='Y'
Where x.UniqProducer IN (SELECT TOP 1 idl.UniqEntity
FROM [ETL_GAWR92]..IDLookupEntity idl
LEFT JOIN [ETL_GAWR92]..Employ e2 ON e2.ProdID = ''
WHERE idl.empID = e2.EmpID AND
idl.EntType = 'EM')
der ersten Abfrage gibt 0 Zeilen zurück, während die zweite Abfrage 2 Zeilen zurückgibt. Der einzige Unterschied ist x.UniqProducer = gegenüber x.UniqProducer IN für die letzte WHERE-Klausel.
Vielen Dank für Ihre Zeit
Wahrscheinlich, weil 'SELECT TOP 1' nicht garantiert, dass der gleiche Datensatz jedes Mal zurückgegeben wird. Ein 'ORDER BY' sollte helfen. –
danke Rick, das hat den Trick gemacht. Ich war verwirrt, weil das Ausführen der Unterabfrage immer das selbe Ergebnis lieferte – cjw