mysql操作查询结果需要使用查询表的字段定义类型来查询不同表的字段时,可以使用case when then else end来解决
Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
创建表一:奖罚表(reward)
one_id | name | type(A.学生 B.老师) | connetId(连接表id) | content |
1 | 记过 | A | S1 | 上课睡觉 |
2 | 奖励 | A | S2 | 帮助困难人士 |
3 | 记过 | B | T1 | 旷工 |
创建表二:教师表(teacher)
teacher_id | name | address | phone |
T1 | 小红 | 中国 | 13455444444 |
T2 | 小明 | 中国 | 13211111111 |
T3 | 小白 | 中国 | 13512345678 |
创建表三:学生表(student)
student_id | name | class_id | phone |
S1 | 小黑 | 01 | 13211111112 |
S2 | 小李 | 02 | 13211111113 |
S3 | 小丽 | 03 | 13211111114 |
对不同类型的人进行不同的表字段关联:
SELECT
r.one_id,
r.name,
CASE WHEN r.type = 'A' THEN "学生"
ELSE "老师" END AS type,
CASE WHEN r.type = 'A' THEN (SELECT student.name FROM student WHERE student.student_id = r.connetId)
ELSE (SELECT teacher.name FROM teacher where teacher.teacher_id = r.connetId) END AS rewardName,
r.content
FROM
reward r
结果:
one_id | name | type | rewardName | content |
1 | 记过 | 学生 | 小黑 | 上课睡觉 |
2 | 奖励 | 学生 | 小李 | 帮助困难人士 |
3 | 记过 | 老师 | 小红 | 旷工 |