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

标签 mysql select group-by relational-division

我在尝试从表中检索所有产品 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/

相关文章:

mysql - 数据库: Making a Log of actions,如何处理各种引用?

mysql - Mysql中的字母数字排序依据

c - select() 返回无效参数

php - 查询使我的页面没有响应

mysql - 如何获取MySQL中最大项目数的值

r - 选择具有其他列的特定值的列的不同值

php ON DUPLICATE UPDATE 不起作用

mysql - 对多个表进行子查询的 SUM GROUP BY

mysql - 显示余额最高的 10 条记录

mysql - SQL 按 2 列分组