次の2つのクエリでは異なる結果が得られますが、その理由はわかりません。唯一の違いは、1つはINを持ち、もう1つは等価です。異なる結果を返す2つのほぼ同一のクエリ
質問に入る前に、サブクエリを共通のテーブル式に移動してより良い方法を見つけたことを知っておく必要がありますが、これはまだ私を夢中にしています!私は本当に最初の場所で問題の原因を知りたい、私は好奇心から求めてい
ここで最初のクエリです:
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')
2つ目:
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')
最初は、クエリは0行を返し、2つ目のクエリは2行を返します。唯一の違いは、最後のwhere句ではx.UniqProducer = x.UniqProducer INです。お時間を
おかげ
おそらく、「SELECT TOP 1」は毎回同じレコードが返されることを保証しないためです。 'ORDER BY'が助けになるはずです。 –
リックに感謝し、そのトリックをしました。サブクエリを単独で実行すると、常に同じ結果が返されるので、私は混乱しました – cjw