0

我的查询返回多个结果时遇到了挑战。

SELECT DISTINCT gpph.id, gpph.cname, gc2a.assetfilename, gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'

结果集

一条记录 5679599 有 2 个“主图像”,并为该 ID 返回 2 个结果,但我只需要返回第一个结果。在当前查询中有什么方法可以做到这一点?我需要编写多个查询吗?

我需要一些关于如何将结果限制为在主图像上只有 1 个结果的指导。我已经查看了大量类似的问题,但大多数情况下只需要在查询开头而不是在 where 子句中添加“distinct”的指导。

编辑:这个问题是由用户在数据库中的一条记录上输入 2 个主图像造成的。我的业务要求只说明要取得第一个结果。

任何帮助都是极好的!

4

2 回答 2

2

鉴于选择返回哪个是任意的,我们可以只对值使用聚合。然后这需要一个group by子句,它消除了对不同的需要。

SELECT gpph.id, gpph.cname, max(gc2a.assetfilename), gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'
GROUP BY gpph.id, gpph.cname, gpph.alternateURL

max(gc2a.assetfilename)在这种情况下,如果有多个记录,using将为您提供按字母顺序排列的最高值。这不是理想的选择,知道记录顺序的某种时间戳可能会更有帮助,因为那时“第一”这个词的含义可能更有意义。

于 2012-11-08T22:21:40.017 回答
0

将 distinct 替换为 group by :

SELECT MAX(gpph.id), gpph.cname, gc2a.assetfilename, gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'
AND gpph.id = MAX(gpph.id)
GROUP BY  gpph.cname, gc2a.assetfilename, gpph.alternateURL
于 2012-11-08T22:09:11.260 回答