2013-07-19 73 views
3

我有两个表Productimages。 两个表中的值在下面给出SQLSERVER 2008的SQL查询

SELECT * FROM ProductTable 

结构是(PRODUCTID,类别ID,产品名称)

1 1 Product1 
2 1 Product2 
3 2 Product2 
4 2 Product3 
5 2 Product4 

SELECT * FROM ImageTable 

结构是(图像标识,产品ID,ImageName)

1 1 Image1 
2 1 Image2 
3 2 Image3 
4 2 Image4 
5 4 Image5 
6 5 Image6 

我查询是:

SELECT ImageTable.ProductID, ImageName 
FROM ImageTable 
LEFT JOIN ProductTable ON ImageTable.ProductID=ProductTable.ProductID 
GROUP BY ImageTable.ProductID, ImageName 

结果是:

1 Image1 
1 Image2 
2 Image3 
2 Image4 
4 Image5 
5 Image6 

但我想要的结果相同(即产品ID的从imagetable第一Imagename)

1  Image1 
2  IMage3 
4  Image5 
5  Image6 
+0

是 “第一” 定义为具有最低'ImageId'值的行?因为根据定义,表不具有订单。 –

回答

2
SELECT ImageTable.ProductID, MIN(ImageName) 
FROM ImageTable 
LEFT JOIN ProductTable ON ImageTable.ProductID=ProductTable.ProductID 
GROUP by ImageTable.ProductID 
+1

它的sql服务器,你必须把选择列表中的列或者在group by或者aggregate函数中,否则它会给你错误 –

+1

+1 - 为了很好的答案。 – Devart

3

真的LEFT JOINProductTable是不必要的。因此,尝试这一个 -

SELECT ProductID, ImageName 
FROM (
    SELECT 
      i.ProductID 
      , i.ImageName 
      , rn = ROW_NUMBER() OVER (PARTITION BY i.ProductID ORDER BY i.ImageName) 
    FROM dbo.ImageTable i 
) t 
WHERE t.rn = 1 

或者试试这个 -

SELECT 
     i.ProductID 
    , ImageName = MIN(i.ImageName) 
FROM dbo.ImageTable i 
GROUP BY i.ProductID 

输出 -

ProductID ImageName 
----------- --------- 
1   Image1 
2   Image3 
4   Image5 
5   Image6 
+2

我刚刚使用'MIN()'而不理解他的实际查询。 +1花时间回答并提供简单查询。 – hims056

+0

谢谢。 @ hims056,你能否取消你的回答?我无法对它投票。 – Devart

+0

但我的解决方案不好,为什么我删除.. :( – hims056

2
SELECT ProductID, MIN(ImageName) 
    FROM 
     ImageTable 
GROUP by ProductID