Похоже, вы делаете особый тип реляционного разделения. То есть вы ищете контент, который соответствует набору тем, где каждый элемент имеет чередующиеся.
Вы не можете сделать это только с условием в предложении WHERE
, потому что условие оценивается по одному ряду за раз. Не существует значения id_topic
для данной строки, которая одновременно является 2 и 4 и 5.
Вам необходимо условие для наборов строк, и это то, чем является реляционное деление.
В вашем случае я бы сделал это с помощью соединений. Используя объединения, вы можете сделать три ссылки на различные строки Content_Topi c, поэтому условия могут быть взаимоисключающими.
SELECT c.content
FROM Content c
INNER JOIN Content_Topic ct1
ON c.id_content=ct1.id_content AND ct1.id_topic IN (2,3)
INNER JOIN Content_Topic ct2
ON c.id_content=ct2.id_content AND ct2.id_topic IN (4,7,10)
INNER JOIN Content_Topic ct3
ON c.id_content=ct3.id_content AND ct3.id_topic IN (5,9)
Этот запрос должен соответствовать содержимому трех тем , Если он не соответствует всем трем, содержимое не будет возвращено запросом.
Но у каждого из трех есть альтернативы.