2016-07-22 61 views
0

我有一個產品表,分類表,以及它們之間的交叉引用/映射表。 一種產品可以屬於多個類別。 我想查詢生產的產品ID和類別名稱。 由於產品可以屬於多個類別,我希望僅包括這相當於在Product_Category_Mapping.DisplayOrder的最低值之一。獲取記錄在中間交叉引用表,基於最低值右表連接到左表

enter image description here

這是一個有限的樣本數據,從三個表設置

Table: Product PC_Mapping Category 
Column:(ID) (DispOrd) (Name) 
Records 
---------------------------------- 
     1  10   Milk <----- just return this row 
     1  20   Dairy 
     1  30   Cheese 

回答

1

@約翰:我認爲你的查詢需要一點修改。我認爲乍得想要爲每個產品選擇最低價值,所以應該添加一個組。

SELECT p.ID as [Product ID], c.Name as Category, m.x 
FROM Product p INNER JOIN (
    SELECT ProductID, Min(DisplayOrder) as x FROM Product_Category_Mapping GROUP BY ProductId) m ON p.ID = m.ProductID 
    INNER JOIN Product_Category_Mapping pc ON p.ID = pc.ProductID AND m.x = pc.DisplayOrder 
    INNER JOIN Category c ON pc.CategoryID = c.ID 
+0

是。請參閱更新的問題以獲得更清晰 –

+0

是的,這個作品!謝謝! –

0

我想這應該這樣做,但是簡單的答案是可能的:

SELECT p.ID as [Product ID], c.Name as Category 
FROM Product p INNER JOIN (
    SELECT ProductID, Min(DisplayOrder) as x FROM Product_Category_Mapping) m ON p.ID = m.ProductID 
    INNER JOIN Product_Category_Mapping pc ON p.ID = pc.ProductID AND m.x = pc.DisplayOrder 
    INNER JOIN Category c ON pc.CategoryID = c.ID