2013-07-19 104 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