我希望获得列recipes_id
的值,以获得ingredient_id
的2,17和26条目的值。
假设缺少ingredient_id
2,则不记录。
我尝试了IN
运算符,但它显示了任何一个值可用的记录。
这是我正在尝试使用的代码:
SELECT recipes_id FROM `recipes_ingredient` WHERE ingredient_id IN (2,17,26)
这是我目前的结果:
+------------+---------------+
| recipes_id | ingredient_id |
+------------+---------------+
| 1 | 2 |
| 1 | 17 |
| 1 | 26 |
| 3 | 2 |
| 4 | 2 |
| 5 | 26 |
+------------+---------------+
这是我想要的输出:
+------------+
| recipes_id |
+------------+
| 1 |
+------------+
我还有其他方法可以在MySQL中执行此操作吗?
答案 0 :(得分:1)
试试这个:
SELECT
recipes_id
FROM
recipes_ingredient
WHERE ingredient_id IN (2,17,26)
GROUP BY recipes_id
HAVING COUNT(DISTINCT ingredient_id) = 3
<强>解释强>
IN
只是OR
的缩写形式。
因此,只有IN
并不能保证特定recipes_id
能够保留所有这三个。
由于您希望每个recipes_id
的结果(当然符合条件)导致GROUP BY recipes_id
发挥作用。
以后HAVING COUNT(DISTINCT ingredient_id) = 3
仅用于过滤掉那些包含所有三个recipes_id
的{{1}}。
如果ingredient_id
对是唯一的,您可以离开DISTINCT
。 子>