首页 > 解决方案 > SQL - 获取列表中所有列在另一列中具有相同值的行

问题描述

我有一个数据库如下:

drinks_id   ingredients_master_id
1           2
1           3
1           4
2           2
2           4
3           5

我正在寻找一个查询,我可以在其中给它一个如 2,4 的成分_master_id 的列表,它会返回所有恰好有 2,4 的drinks_id。

所以在这种情况下,如果我给它的 ingredients_master_id 2,4,5 它会返回drinks_id 2 和3。如果我给它5 它会返回drinks_id 3。

这是我到目前为止所拥有的,但它目前没有显示正确的信息。

SELECT DISTINCT drinks.id
FROM drinks
WHERE drinks.id NOT IN
(
    SELECT drinks.id
    FROM ingredients 
        JOIN drinks ON ingredients.drinks_id = drinks.id 
    WHERE ingredients.ingredients_master_id NOT IN
    (
        2,3,4,5,6
    )
);

标签: mysqlsql

解决方案


您可能会使用以下方法获得所需的结果not exists

Select t.* 
  From your_table t
 Where t.ingredients_master_id in (2,4,5)
   And not exists
       (Select 1 from your_table tt
         Where tt.drinks_id = t.drinks_id
           And tt.ingredients_master_id not in (2,4,5))

推荐阅读