MySQL一对多映射查询-如果匹配多个,则不返回一个

用户名

说我有一张这样的桌子:

+----------+--------+
| 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章