sql - 查询一对多关系 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 进行搜索。我尝试使用不喜欢的成分,但它不起作用。(我正在使用内部联接)
解决方案
一种方法使用条件聚合来检查成分:
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
推荐阅读
- postgresql - Postgres 查询显示在 heroku 的“最耗时部分”下
- mysql - MYSQL 错误 - 子查询返回超过 1 行
- java - 无法提取 ResultSet Spring Boot
- c# - Unity Mesh Renderer 在错误的一侧生成多边形
- lua - 如何确保句子以大写字母 Lua 开头
- cordova - 如何阅读离子 BLE startnotification 的答案
- python - 访问python字典中的集合字段
- c++ - 除了消除 nullptr 参数的歧义之外,std::nullptr_t 有什么用处吗?
- java - 字符串索引超出范围异常错误
- python - 2 如何将文件中的行与字符串进行比较