所以,我有 3 个表:
- PIZZA 包含 Pizza_ID、pizza_title 和 Pizza_price
- INGREDIENTS,带有成分_ID;成分_标题和成分_描述
- PIZZA_INGREDIENTS,包含 ID、pizza_id、成分_id
我需要从 PIZZA 中选择包含 2 种成分的所有 Pizza_title。 现在,我有这个:
SELECT pizza.pizza_ID, pizza.pizza_title, pizza.pizza_price, pizza_ingredients.ingredient_id
FROM pizza
JOIN pizza_ingredients ON pizza_ingredients.pizza_id=pizza.id
WHERE pizza_ingredients.ingredient_id='7' or pizza_ingredients.id='4'
GROUP BY pizza.id
此代码返回所有含有成分 7 或成分 4 的披萨。我只需要同时含有成分 7 和 4 的披萨...
SQL 不是我的强项,我感谢任何帮助。 谢谢
最佳答案
尝试加入一个子查询,该子查询进行聚合以查找具有两种成分的所有比萨饼:
SELECT p1.*
FROM pizza p1
INNER JOIN
(
SELECT pizza_id
FROM pizza_ingredients
GROUP BY pizza_id
HAVING COUNT(*) = 2
) p2
ON p1.pizza_id = p2.pizza_id;
如果我误解了您问题的措辞,而您想查找具有两种特定成分的所有比萨饼,而不考虑其他成分,请使用以下查询:
SELECT p1.*
FROM pizza p1
INNER JOIN
(
SELECT pizza_id
FROM pizza_ingredients
WHERE ingredients_id IN (4, 7)
GROUP BY pizza_id
HAVING COUNT(DISTINCT ingredients_id) = 2
) p2
ON p1.pizza_id = p2.pizza_id;
关于mysql - 我需要有关 MySql 查询的帮助(从多个表中选择),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48679606/