MySQL选择:通过多个附加记录获取主记录?

时间:2010-10-13 15:48:14

标签: mysql

不知道如何问这个有意义,但我正在尝试进行如下查询:

SELECT * FROM PAGES PAGE_FILTERS中存在附加记录,并且该记录的FilterTypeID为22,并且PAGE_FILTERS中存在另一个附加记录,表示相同的页面ID,并且该记录的过滤器类型ID为27。

我有这样的结构:

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次匹配后没有被选中,但是没有匹配FilterTypeID 27的记录。

匹配,即使有额外的过滤器。

换句话说,我知道页面必须具有哪些过滤器类型,并且我需要获得每个页面都具有所有必需类型的页面。

如果更有意义,我不反对更改数据库结构,但每个页面可能没有附加任何,一个或多个过滤器集。

1 个答案:

答案 0 :(得分: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