我在加入声明中不断重复,任何加入专家请帮助我多次抓挠我的脑袋
SELECT
DISTINCT
image.ImageID,
Lotpw.Lot,
lot.Oper,
lot.Product,
lot.Process,
Image.PartialWafer,
image.UnitX,
image.UnitY,
Image.InspectionStation,
Image.Status,
Image.ImagePath,
image.Date,
FROM Lot
--FROM [VueDb].[dbo].[Lot] join [VueDb].[dbo].[LotPW] on lot.Lot=lotpw.Lot join [VueDb].[dbo].[Image] on lotpw.PartialWafer = image.PartialWafer
LEFT JOIN LotPW
on lot.Lot = lotpw.Lot
RIGHT JOIN image
on LOTPW.partialwafer = Image.partialwafer
WHERE (@Lot= '' or Lot.Lot= @Lot)
and (@Oper ='' or Lot.Oper= @Oper)
and (@Product= '' or Lot.Product= @Product)
and (@Process= '' or Lot.Process= @Process)
and (@PartialWafer= '' or image.PartialWafer= @PartialWafer)
and (@UnitX ='' or Image.UnitX= @UnitX)
and (@UnitY= '' or Image.UnitY= @UnitY)
and (@InspectionStation ='' or Image.InspectionStation = @InspectionStation)
and (@Status ='' or Image.Status= @Status)
and (@LossCode= '' or Image.LossCode= @LossCode)
下面的
是输出的图像
答案 0 :(得分:0)
(不是解决方案,但可能有帮助)
尝试像菲利普建议的那样,然后检查数据:
SELECT
*
FROM Lot
LEFT JOIN LotPW
on lot.Lot = lotpw.Lot
RIGHT JOIN image
on LOTPW.partialwafer = Image.partialwafer
我猜你需要在ON
条款中添加其他条件。
答案 1 :(得分:0)
从您的查询设置方式来看,Lot似乎是层次结构的顶层,并且与LotPW具有1:n的关系(LotPW.Lot建议列:Lot是桌面上的PK:Lot,和因此列:Lot是LotPW上的FK)。左连接表明您不认为每个Lot行在数据库中都有LotPW行(子)。每当Lot中有超过1行与LowPW匹配时,此连接将产生多行。
对图像的连接表明LotPW是此关系中的父级,而LotPW.PartialWafer是LotPW表上的PK。由于此连接是对LotPW的正确加入,它表示您不相信每个PW都有父级。这个右连接可能应该是左连接,否则你否定Lot和LotPW之间的左连接
要对此进行重复数据删除,假设Lot或LotPW中可能存在与给定PW匹配的多行,但您不关心额外数据,请在Lot和LotPW之间进行连接并对所有值进行分组。然后在左/右连接PW中使用此结果集。
类似的东西:
Select distinct
image.ImageID,
Lotpw.Lot,
lot.Oper,
lot.Product,
lot.Process,
Image.PartialWafer,
image.UnitX,
image.UnitY,
Image.InspectionStation,
Image.Status,
Image.ImagePath,
image.Date
From
(select Lot.Lot, Lot.Oper, lot.Product, lot.process, LotPW.PartialWafer
From Lot left join LotPW on Lot.Lot = LotPW.Lot
Group by Lot.Lot, Lot.Oper, lot.Product, lot.process) UniqueLots
Left Join Image on Image.PartialWafer = UniqueLots.PartialWafer
答案 2 :(得分:0)
列表中的每一行都是不同的; select distinct
是row operator
,意味着它适用于整行。请注意(黄色)每行确实有不同的东西。 pxq100!= pxq200等等。
所以,如果您使用过select distinct
,并且您认为自己仍然认为自己正在使用重复项,那么您只能使用正确的技术,因为select distinct only does one thing,您需要GROUP BY
或ROW_NUMBER()