gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:39:39 28 4
gpt4 key购买 nike

我想获取 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 中还有其他方法可以做到这一点吗?

最佳答案

试试这个:

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给定了。

你可以离开 DISTINCT如果<recipes_id,ingredient_id>对是独一无二的。

关于mysql - 如何使用 MYSQL 运算符选择列所有值都必须可用 - MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011081/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com