HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。
以mysql数据库的系统信息数据库INFORMATION_SCHEMA为例,INFORMATION_SCHEMA.KEY_COLUMN_USAGE视图标出当前数据库中所有被某些唯一约束、主键约束或者外键约束限制的字段。
如下操作显示了sakila数据库中含有多列索引的表。
SELECT TABLE_NAME, GROUP_CONCAT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA='sakila'
GROUP BY TABLE_NAME, CONSTRAINT_NAME
HAVING COUNT(*) > 1;
操作结果如下:
+---------------+--------------------------------------+
| TABLE_NAME | GROUP_CONCAT(COLUMN_NAME) |
+---------------+--------------------------------------+
| film_actor | actor_id,film_id |
| film_category | film_id,category_id |
| rental | rental_date,inventory_id,customer_id |
+---------------+--------------------------------------+