Результаты пересечения Mysql

Я пытаюсь сделать что-то вроде PHP array_intersect . У меня есть следующая таблица

 CREATE TABLE `recipes_ingredients_items` ( `id` INTEGER(11) DEFAULT NULL, `itemid` INTEGER(11) DEFAULT NULL, `orderby` TINYINT(4) NOT NULL, KEY `id` (`id`), KEY `itemid` (`itemid`) )ENGINE=MyISAM AVG_ROW_LENGTH=47 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 

Мне нужен запрос, который даст мне все результаты, которые содержат say id 2,72,64 в качестве отдельного элемента. Дело в том, что идентификатор может существовать более одного раза в itemid, то есть itemid 600 может иметь 3 строки с идентификаторами 2100,2, связанных с ним.
Моя идея заключалась в том, чтобы иметь запрос с array_intersect числа x подзапросов, возвращающих результаты, и делать что-то вроде PHP array_intersect , возвращая тем самым элементы, у которых есть все эти идентификаторы.

 SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 71) AND id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 2) AND id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 22) 

Это то, что я получил, и это на 100% неправильно.

Обычно вы выполняете пересечение элементов списка каждого идентификатора :

 (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 71) INTERSECT (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 2) INTERSECT (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 22) 

Это будет выбирать только те элементы, где есть идентификатор для всех трех идентификаторов .

Но поскольку MySQL не поддерживает INTERSECT , вам необходимо использовать внутренние соединения:

 SELECT DISTINCT itemid FROM recipes_ingredients_items INNER JOIN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 71) a USING (itemid) INNER JOIN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 2) b USING (itemid) INNER JOIN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 22) c USING (itemid) 

Попробуй это:

 SELECT item_id FROM recipes_ingredients_items WHERE id IN (71, 2, 22) GROUP BY item_id HAVING COUNT(*) = 3