我想获取具有值为2,17和26的recipes_id
条目的列的值ingredient_id
。
假设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中做到这一点吗?
试试这个:
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
持有所有ingredient_id
给定的三个s的对象。
您可以离开DISTINCT
if<recipes_id,ingredient_id>
对是唯一的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句