如何使用MYSQL运算符选择列所有值必须可用 - MYSQL

时间:2016-08-18 06:15:41

标签: mysql

我希望获得列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中执行此操作吗?

1 个答案:

答案 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