在MySQL中编写以下查询时遇到问题。我有一张叫做pizz0r_pizza_ingredients
的桌子,看起来像这样:
| id | pizza_id | ingredient | amount | measure |
+----+----------+------------+--------+---------+
| 6 | 1 | 15 | 3 | 4 |
|178 | 17 | 1 | 160 | 1 |
| 3 | 1 | 20 | 3 | 4 |
我想搜索比萨饼,其中的成分有具体要求,如:
SELECT `pizza_id`
FROM `pizz0r_pizza_ingredients`
WHERE `ingredient` = 15 AND `ingredient` != 20
GROUP BY `pizza_id`
我试图得到
ingredient
等于15的条目,但如果比萨饼也有配料20,则忽略它。当前结果是
1
,但在本例中不应返回任何内容。 最佳答案
我喜欢使用group by
和having
来处理这些问题:
SELECT `pizza_id`
FROM `pizz0r_pizza_ingredients`
GROUP BY `pizza_id`
HAVING SUM(ingredient = 15) > 0 AND
SUM(ingredient = 20) = 0;
您可以添加任意多的新需求。
SUM()
表达式计算特定类型的成分数。> 0
表示比萨饼上至少有一个。= 0
表示没有。关于mysql - WHERE子句中的多行条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27690447/