gpt4 book ai didi

MySQL从匹配数组的表中获取所有相关ID

转载 作者:行者123 更新时间:2023-11-29 01:30:36 26 4
gpt4 key购买 nike

我在尝试从表中检索所有产品 ID(如果它们与数组中的所有项目匹配)时遇到问题,在这种情况下,仅当产品包含用户搜索的所有成分时才返回产品。

表格是这样的

    ID  produktID   ingredientID
----------------------------
1 418 1
2 418 2
3 418 3
4 416 4
5 411 1
6 411 5
7 411 6

我从存储主要信息的产品表加入此表。查询的目的应该是仅当所有成分 ID 都与给定数组匹配时才检索产品 ID。我试过使用 WHERE ingredientID IN(1,5,6) 但它总是证明是一个 OR 语句,返回匹配任何成分的每个 ID。因此,例如,如果我通过 (1,5,6) 或 (5,6),则应返回产品 ID 411,但如果我通过 (2,5,6),则不应返回。

我尝试的查询看起来像这样(经过简化,它是连接到品牌和类别等其他关系的 5 种方式的一部分)

SELECT productID FROM products_ingredients_mm WHERE ingredientID IN (1,5,6) GROUP BY productID

但结果也包含 418。我如何让它匹配?我希望我能够以一种可以理解的方式描述问题,我真的很难绕着它问一个问题。

最佳答案

这称为关系划分。

SELECT  produktID
FROM tableName
WHERE ingredientID IN (1,5,6)
GROUP BY produktID
HAVING COUNT(*) = 3

如果没有对每个 produktIDingredientID 强制执行唯一约束,那么您需要使用 DISTINCT

SELECT  produktID
FROM tableName
WHERE ingredientID IN (1,5,6)
GROUP BY produktID
HAVING COUNT(DISTINCT ingredientID) = 3

其他来源

关于MySQL从匹配数组的表中获取所有相关ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382224/

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