首页 > 解决方案 > 查询一对多关系 SQL

问题描述

我有这些桌子

Table FoodName - Table FoodIngredients - Table FoodDescrip     
  ID | Name    -    ID | Ingredient    - ID | Descrip | IDFoodN | IDIngred
  01 |  A      -   001 |    AA         - 01 |   abcb  |   01    |  001
  02 |  B      -   002 |    BB         - 02 |   abcb  |   01    |  002
                   003 |    CC           03 |   abcb  |   01    |  003
                                         04 |   abcb  |   02    |  001
                                         05 |   abcb  |   02    |  003

我试过了

Select 
  f.Name 
From 
  f.FoodName 
INNER JOIN 
  FoodDescrip D ON f.ID = D.ID 
INNER JOIN 
  FoodIngredients I ON I.ID = D.ID 
WHERE 
  Ingredient LIKE NOT ='BB'"

我需要知道没有成分 BB 的食物,但我需要按成分名称而不是 id 进行搜索。我尝试使用不喜欢的成分,但它不起作用。(我正在使用内部联接)

标签: sql

解决方案


一种方法使用条件聚合来检查成分:

SELECT
    f1.ID, f1.Name
FROM FoodName f1
INNER JOIN FoodDescrip f2
    ON f1.ID = f2.IDFoodN
INNER JOIN FoodIngredients f3
    ON f2.IDIngred = f3.ID
GROUP BY
    f1.ID, f1.Name
HAVING
    SUM(CASE WHEN f3.Ingredient = 'BB' THEN 1 ELSE 0 END) = 0

推荐阅读