一个简单的 MySQL 的 CASE 语句以及 having 子句示例

我们有一张描述学校的表,dict_school,另外有一张学校和学段一对多的对应表 dict_school_period , 也就是说一个学校可以有多个学段,例如一个完全中学,就包含了初中和高中。

本例是要取出那些包含多个学段的学校,并把学段名称显示出来。

由于学段名称没有创建表,而存储时是按数字存放的,所以,我们需要在选出数据时用 case 语句来展示。

以下是一个完整的例子:

SELECT s.area,s.name,
CASE p.period
WHEN 1 THEN ‘小学’
WHEN 2 THEN ‘初中’
WHEN 3 THEN ‘高中’
END AS ‘学段’

FROM dict_school s
JOIN dict_school_period p ON s.id=p.dict_school_id
WHERE s.id IN (
SELECT dict_school_id FROM dict_school_period
GROUP BY dict_school_id HAVING COUNT(dict_school_id) >1
)

输出:

+———————–+—————————————————–+——–+
| area | name | 学段 |
+———————–+—————————————————–+——–+
| 上海市虹口区 | 上海市新市学校 | 小学 |
| 上海市虹口区 | 上海市新市学校 | 初中 |

作者: 甬洁网络

--移动互联网&物联网技术提供商