2010-10-13 104 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