创建基于多个列值计算总值的视图表

时间:2015-07-18 12:16:00

标签: mysql view

这些是我的示例表 课程表包括

course_id     |      course name
1             |       java
2             |       .net
3             |       php
4             |       ruby and rails

Indian_student表包括

course_id     | no.of student
2             |       10
3             |       30

Japan_student表包括

course_id     | no.of student
1             |       50
2             |       30

Chinese_student表包括

course_id     | no.of student
2             |       60
4             |       20

我希望输出为

Course_id |  in_stu   |  ja_stu  |  ch_stu   | total
1         |   0      |     50    |    0       |   50
2         |   10     |     30    |    60      |    100
3         |   30     |     0     |    0       | 30
4         |    0     |     0     |    20      |20

但我只得到了结果

Course_id   |   in_stu     |    ja_stu     |    ch_stu     | total
2           |    10        |     30       |    60         |  100

我的观点是

create view total_student  as select
i.indian_stu as in_stu,
j.japan_stu as ja_stu,
c.chinese_stu as ch_stu,
main.course_id as course_id,
 (i.indian_stu + j.japan_stu +  c.chinese_stu) as total
from indian_student i, japan_student j,chinese_student c, course c
where i.course_id=main.course_id and j.course_id=main.course_id and c.course_id=main.course_id  group by course_id;

我可以得到任何建议

1 个答案:

答案 0 :(得分:0)

您正在使用20世纪90年代的复古方法将表格连接在一起:以逗号分隔的表格列表。这不适合你的任务。您需要LEFT JOIN,因为逗号语法是INNER JOIN语法。 INNER JOIN省略了没有匹配项的行。

(另外,您的示例查询使用c别名两次;这不会起作用。它也使用GROUP BY,但我相信您需要ORDER BY

你想要这个:

select i.indian_stu as in_stu,
       j.japan_stu as ja_stu,
       x.chinese_stu as ch_stu,
       main.course_id as course_id,
       (i.indian_stu + j.japan_stu +  c.chinese_stu) as total
  from course c
  left join indian_student i ON c.course_id = i.course_id
  left join japan_student j ON c.course_id = j.course_id
  left join chinese_student x on c.course_id = x.course_id
 order by c.course_id

开发视图时,首先要使SELECT语句起作用,然后使用它来创建视图。这比不断删除和重新创建视图更容易。