【问题标题】:FROM clause in view error视图错误中的 FROM 子句
【发布时间】:2016-07-03 10:17:27
【问题描述】:

创建以下视图时出现错误

    create or replace view viewfee as
    select unique_id,session,course_cat,course,class,rollno, sum(adm_due) as adm_due, sum(tuition_due) as tuition_due, sum(exam_due) as exam_due from 
    (
    select unique_id,session,course_cat,course,class,rollno,null as adm_due, null as tuition_due, null as exam_due from tbstdinfo
    union all
    select unique_id,null,null,null,null,null,(adm_tot - sum(adm_payment)) AS adm_due, null, null from tbfeeadmission group by unique_id
    union all
    select unique_id,null,null,null,null,null,null, (tuition_tot - sum(tuition_payment)) AS tuition_due, null from tbfeetuition group by unique_id
    union all
    select unique_id,null,null,null,null,null,null, null, (exam_tot - sum(exam_payment)) AS exam_due from tbfeeexam group by unique_id
    )x
    group by unique_id

但是如果我在没有视图的情况下执行查询,它工作正常

select unique_id,session,course_cat,course,class,rollno, sum(adm_due) as adm_due, sum(tuition_due) as tuition_due, sum(exam_due) as exam_due from 
(
select unique_id,session,course_cat,course,class,rollno,null as adm_due, null as tuition_due, null as exam_due from tbstdinfo
union all
select unique_id,null,null,null,null,null,(adm_tot - sum(adm_payment)) AS adm_due, null, null from tbfeeadmission group by unique_id
union all
select unique_id,null,null,null,null,null,null, (tuition_tot - sum(tuition_payment)) AS tuition_due, null from tbfeetuition group by unique_id
union all
select unique_id,null,null,null,null,null,null, null, (exam_tot - sum(exam_payment)) AS exam_due from tbfeeexam group by unique_id
)x
group by unique_id

实际上我需要合并四个表才能在一个表中获取所有所需的记录。请帮忙

【问题讨论】:

标签: mysql


【解决方案1】:

在 MySQL 5.7.7 之前,SELECT 语句不能包含子查询 FROM 子句。

参考:

http://dev.mysql.com/doc/refman/5.7/en/create-view.html

【讨论】:

    【解决方案2】:

    视图定义中不能有子选择,但是你可以这样做:

    create or replace view intermediate_view as
    select unique_id,session,course_cat,course,class,rollno,null as adm_due, null as tuition_due, null as exam_due from tbstdinfo
    union all
    select unique_id,null,null,null,null,null,(adm_tot - sum(adm_payment)) AS adm_due, null, null from tbfeeadmission group by unique_id
    union all
    select unique_id,null,null,null,null,null,null, (tuition_tot - sum(tuition_payment)) AS tuition_due, null from tbfeetuition group by unique_id
    union all
    select unique_id,null,null,null,null,null,null, null, (exam_tot - sum(exam_payment)) AS exam_due from tbfeeexam group by unique_id
    

    然后

    create or replace view viewfee as
    select unique_id,session,course_cat,course,class,rollno, sum(adm_due) as adm_due, sum(tuition_due) as tuition_due, sum(exam_due) as exam_due from intermediate_view
    group by unique_id
    

    作为一种解决方法

    【讨论】:

    • 我已经这样做了,但我想要一个视图,无论如何谢谢
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多