这些是我的示例表 课程表包括
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;
我可以得到任何建议
答案 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语句起作用,然后使用它来创建视图。这比不断删除和重新创建视图更容易。