Не уверен, как это задавать, поэтому имеет смысл, но я пытаюсь сделать запрос вроде:
ВЫБЕРИТЕ * ИЗ СТРАНИЦ, ГДЕ В PAGE_FILTERS существует прикрепленная запись, и эта запись имеет FilterTypeID из 22 И еще одна прикрепленная запись существует в PAGE_FILTERS для того же идентификатора страницы, и эта запись имеет идентификатор типа фильтра 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, мой запрос должен возвращать Page ID 1 и 3. Page 2 не выбирается с 22 совпадений, но нет записи, соответствующей FilterTypeID 27.
Page 3, хотя есть дополнительный фильтр.
Другими словами, я знаю, какие типы фильтров должна иметь страница, и мне нужно, чтобы все страницы имели все необходимые типы.
Я не против изменения структуры базы данных, если это имеет смысл, но на каждой странице не может быть ни одного, ни одного, ни множества фильтров.
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