Mysql交叉结果

mbo*_*las 2 php 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';  
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,它会将包含id为2,72,64的所有结果作为一个不同的itemid.问题是id可能在itemid中不止一次存在,即itemid 600可能有3行,其中id为2,100,2.
我的想法是让一个查询说x number o子查询返回结果并执行类似PHP的操作array_intersect,从而返回具有所有这些id的itemid.

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)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的,它是100%错误的.

Mar*_*ers 5

试试这个:

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