在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 byhaving来处理这些问题:

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/

10-11 09:15