2010-10-13 165 views
0

不知道怎麼問這是很有意義的,但我試圖做這樣的查詢:MySQL選擇:通過多個附加記錄獲取主記錄?

SELECT * FROM WHERE附加紀錄PAGE_FILTERS存在頁面和記錄有附加的22和另一FilterTypeID記錄存在於PAGE_FILTERS在同一頁的ID和記錄有27

濾波器類型ID我有這樣的結構:

 
PAGES table 
PageID  PageName 
1   Page 1 
2   Page 2 
3   Page 3 

PAGE_FILTERS table 
PageID  FilterTypeID   FilterValueID 
1     22     1 
1     27     2 
2     22     0 
2     24     1 
3     22     1 
3     27     1 
3     28     2 

因此,考慮到FilterTypeID的22和27年代,我的查詢應返回PageID的1和3.自從22個匹配項沒有被選中,但沒有記錄m即使有一個額外的過濾器,也可以匹配過濾器類型。

換句話說,我知道一個頁面必須具有哪些過濾器類型,並且我需要獲取所有具有所有必需類型的頁面。

我不反對更改數據庫結構,如果它更有意義,但每個頁面可能沒有,一個或多個附加的過濾器集。

回答

0
SELECT p.* 
FROM pages p 
JOIN PAGE_FILTERS pf 
ON p.PageID = pf.PageID 
    AND pf.FilterTypeID IN (22,27) 
GROUP BY p.PageID 
HAVING COUNT(DISTINCT pf.FilterTypeID) = 2