说我有一张这样的桌子:
+----------+--------+
| brand | vehicle|
+----------+--------+
| ford | car |
| ford | truck |
| ford | suv |
+----------+--------+
我想编写一个仅在所有3行都满足条件时才返回品牌的查询。例如,如果我说“给我有汽车的品牌,但没有卡车或越野车的品牌”,我希望查询不返回任何内容,因为“ ford”具有全部3。不幸的是,我构建的查询不起作用:
SELECT brand
FROM table
WHERE vehicle='car'
AND vehicle != 'truck'
AND vehicle != 'suv';
查询返回“ ford”。我知道为什么会这么做。它针对每一行测试了条件,并通过了第1行,因此返回了第1行的品牌。但是,如何构造查询以执行所需的操作?
可以检查任意数量的条件的最通用方法是将条件放在HAVING
子句中。
SELECT brand
FROM table_name
GROUP BY brand
HAVING MAX(vehicle = 'car') = 1
AND MAX(vehicle = 'truck') = 0
AND MAX(vehicle = 'suv') = 0;
这是SQLFiddle演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句