none
如何实现 将视图的视图 还原成 并表查询? RRS feed

  • 问题

  • 我对一个数据库的若干表建了几个视图.


    基本视图如下:
    1  View_s

              其代码:
    SELECT    SUM(dbo.Account.Change) AS s
    FROM        dbo.Account INNER JOIN
    dbo.[User] ON dbo.Account.UserID = dbo.[User].UserID
    WHERE    (dbo.Account.InOrOut = 1)

    2  View_k

              其代码:
    SELECT    SUM(dbo.Account.Change) AS k
    FROM        dbo.Account INNER JOIN
                          dbo.[User] ON dbo.Account.UserID = dbo.[User].UserID
    WHERE    (dbo.Account.InOrOut = 0)

    3  View_TotalAccount  这个视图是对上面的两个视图的查询
    其代码:
    SELECT    dbo.View_s.s - dbo.View_k.k AS TotalAccount
    FROM        dbo.View_k CROSS JOIN
                          dbo.View_s

    4    View_l其代码:
    SELECT    SUM(dbo.Point.UserPoint) AS l
    FROM        dbo.Point INNER JOIN
                          dbo.[User] ON dbo.Point.UserID = dbo.[User].UserID
    WHERE    (dbo.Point.InOrOut = 1)


    5  View_m其代码:
    SELECT    SUM(dbo.Point.UserPoint) AS m
    FROM        dbo.Point INNER JOIN
                          dbo.[User] ON dbo.Point.UserID = dbo.[User].UserID
    WHERE    (dbo.Point.InOrOut = 0)

    6  View_TotalPoint 这个视图是对上面的两个视图的查询其代码:
    SELECT    dbo.View_l.l - dbo.View_m.m AS TotalPoint
    FROM        dbo.View_m CROSS JOIN
                          dbo.View_l

    7  View_User
    其代码:
    SELECT    UserName, UserRealName, UserRegisterTime, UserAccountStatus
    FROM        dbo.[User]

    8  View_TelePhone
    其代码:
    SELECT    dbo.Address.Telphone
    FROM        dbo.Address INNER JOIN
                          dbo.[User] ON dbo.Address.UserID = dbo.[User].UserID

    9  View_LoginCount
    其代码:
    SELECT    COUNT(dbo.UserLog.UserID) AS LoginCount
    FROM        dbo.UserLog INNER JOIN
                          dbo.[User] ON dbo.UserLog.UserID = dbo.[User].UserID

    10  View_UserManage 这个是对以上所有视图的的查询其代码:
    SELECT    dbo.View_User.UserName, dbo.View_User.UserRealName, dbo.View_TotalAccount.TotalAccount, dbo.View_TotalPoint.TotalPoint,
                          dbo.View_User.UserAccountStatus, dbo.View_TelePhone.Telphone, dbo.View_LoginCount.LoginCount, dbo.View_User.UserRegisterTime
    FROM        dbo.View_LoginCount CROSS JOIN
                          dbo.View_TelePhone CROSS JOIN
                          dbo.View_TotalAccount CROSS JOIN
                          dbo.View_TotalPoint CROSS JOIN
                          dbo.View_User




    我的期望是:  把第十个视图 还原成建立在 若干相关表的 第一级视图
    即: 把所有视图的视图 还原, 实现建立在 相关表上的 单一视图

    问题:
    如何实现  将视图的视图 还原成 并表查询?


    期待精通SQL,熟练掌握  关系代数的 达人 指教!
    • 已移动 Sheng Jiang 蒋晟 2009年8月28日 21:08 SQL语法问题 (发件人:ADO.NET 与 LINQ)
    2009年8月28日 13:25

答案

  • --其实很简单
    --只要用试图的sql语句替换掉应用此试图的名称即可
    --你提供的试图太多
    --我简单搞3个试图举例,您参照处理即可
    create view view_sub1
    as
    	select * from table1 
    	where type=1
    
    create view view_sub2
    as
    	select * from table2 t2,table3 t3 
    	where t2.id=t3.id
    
    create view view_all
    as
    	select * from view_sub1 s1,view_sub2 s3 
    	where s1.id=s2.id
    
    --修改后的view_all试图
    create view view_all
    as
    	select * from 
    	(select * from table1 
    	where type=1) s1,
    	(select * from table2 t2,table3 t3 
    	where t2.id=t3.id) s3 
    	where s1.id=s2.id

    family as water
    2009年8月29日 2:27