MySQL选择:通过多个附加记录获取主记录?
问题描述:
不知道怎么问这是很有意义的,但我试图做这样的查询: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即使有一个额外的过滤器,也可以匹配过滤器类型。
换句话说,我知道一个页面必须具有哪些过滤器类型,并且我需要获取所有具有所有必需类型的页面。
我不反对更改数据库结构,如果它更有意义,但每个页面可能没有,一个或多个附加的过滤器集。
答
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