博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个类似权限挂载的设计
阅读量:5346 次
发布时间:2019-06-15

本文共 4758 字,大约阅读时间需要 15 分钟。

四个表,

第一个 DECLARE @A TABLE 状态表

DECLARE @A TABLE    (      [Aid] INT PRIMARY KEY NOT NULL ,      [name] NVARCHAR(50) NOT NULL    ) ;

有id,有[name]表状态,假设@A表有三种状态

INSERT  INTO @A( Aid, name )VALUES  ( 1, N'状态1')INSERT  INTO @A( Aid, name )VALUES  ( 2, N'状态2')INSERT  INTO @A( Aid, name )VALUES  ( 3, N'状态3')

第二个 DECLARE @B TABLE 动作表

DECLARE @B TABLE    (      [Bid] INT PRIMARY KEY NOT NULL ,      [Aid] INT NOT NULL ,      [Name] NVARCHAR(50) NOT NULL    );

有自己的Id,和表@A的Id,[name]表动作名称 假设@A表 状态1对应2个动作、状态2下对应3个动作、状态3下对应1个动作

INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 1, -- id - int name就可以说是状态1下的动作1          1,  -- Aid - int          N'状态1下的动作1' )INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 2, -- id - int  name就可以说是状态1下的动作2          1,  -- Aid - int          N'状态1下的动作2' )INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 3, -- id - int name就可以说是状态2下的动作1          2,  -- Aid - int          N'状态2下的动作1' )INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 4, -- id - int  name就可以说是状态2下的动作2          2,  -- Aid - int          N'状态2下的动作2' ) INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 5, -- id - int name就可以说是状态2下的动作3          2,  -- Aid - int          N'状态2下的动作3' )     INSERT  INTO @B( Bid, Aid, Name )VALUES  ( 6, -- id - int name就可以说是状态3下的动作1          3,  -- Aid - int          N'状态3下的动作1' )

第三个 DECLARE @C TABLE 部门表

DECLARE @C TABLE    (      [Cid] INT PRIMARY KEY NOT NULL ,      [Aid] INT NOT NULL ,      [Deptid] INT NOT NULL    );

有自己的Id,和表@A的Id,[Deptid]表部门Id,这里假设有2个部门

INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 1, -- id - int          1, -- Aid - int  状态1          1  -- Deptid - int          )     INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 2, -- id - int          2, -- Aid - int  状态2                1  -- Deptid - int          )INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 3, -- id - int          3, -- Aid - int   状态3          1  -- Deptid - int          )------50321INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 4, -- id - int          1, -- Aid - int   状态1          50321  -- Deptid - int          )     INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 5, -- id - int          2, -- Aid - int   状态2          50321  -- Deptid - int          )INSERT  INTO @C( Cid, Aid, Deptid )VALUES  ( 6, -- id - int          3, -- Aid - int   状态3          50321  -- Deptid - int          )

第四个 DECLARE @D TABLE 部门表动作表

DECLARE @D TABLE    (      [Did] INT PRIMARY KEY IDENTITY(1, 1)NOT NULL ,      [Bid] INT NOT NULL ,      [Cid] INT NOT NULL    );

有自己的Id,和表@B的Id,表@C的Id

INSERT  INTO @D( Bid, Cid )VALUES  ( 1, -- Bid - int    状态1下的动作1          1  -- Cid - int     部门1  和状态1          ) INSERT  INTO @D( Bid, Cid )VALUES  ( 2, -- Bid - int     状态1下的动作2          1  -- Cid - int      部门1  和状态1          ) INSERT  INTO @D( Bid, Cid )VALUES  ( 4, -- Bid - int      状态2下的动作2          2  -- Cid - int      部门1  和状态2          ) INSERT  INTO @D( Bid, Cid )VALUES  ( 5, -- Bid - int       状态2下的动作3          1  -- Cid - int        部门1  和状态2          )

 

:总共有6个动作,已知为部门1配置的动作有4个,现在需要你copy一份部门1的动作个另一个部门50321

/*A表就是状态列表 B表就是每个状态下对应的动作列表C就是每个状态拥有那些部门     或者说部门下拥有那些状态D就是部门下拥有的状态的动作*/--现在要往  D表复制一份 部门1的数据/*

 

根据表@C,@A我们可知道  ,150321 部门已配置的状态,可配置的动作

/*已配置的状态,可配置的动作*/SELECT  b.Bid ,        c.Cid ,        A.name AS '状态' ,        B.NAME AS '动作'FROM    @C AS c        LEFT JOIN @A AS a ON C.Aid = a.Aid        LEFT JOIN @B AS b ON a.Aid = b.AidWHERE   c.Deptid = 1SELECT  b.Bid ,        c.Cid ,        A.name AS '状态' ,        B.NAME AS '动作'FROM    @C AS c        LEFT JOIN @A AS a ON C.Aid = a.Aid        LEFT JOIN @B AS b ON a.Aid = b.AidWHERE   c.Deptid = 50321

 

根据表@D、@C、@B 可得知 @C表1部门已配置的四个动作

/*1部门已配置的4个动作*/SELECT  b.bid ,c.cid ,b.NameFROM    @D AS d        LEFT JOIN @C AS c ON d.Cid = c.Cid        LEFT JOIN @B AS b ON d.Bid = b.BidWHERE   c.Deptid = 1

然后就是根据50321部门可以配置的动作与1部门相链接,得出可被50321部门配置的并且1部门已配置的动作的集合,将其插入 @D 表 ,

INSERT  INTO @D( Bid ,Cid )        SELECT  v1.Tbid ,v1.Tcid        FROM    ( SELECT    b.bid AS Tbid ,c.cid AS Tcid                  FROM      @B AS b                            LEFT JOIN @A AS a ON a.aid = b.Aid                            LEFT JOIN @C AS c ON a.aid = c.Aid                  WHERE     c.Deptid = 50321                ) v1                INNER JOIN ( SELECT b.bid AS bid ,c.cid AS cid                             FROM   @B AS b                                    LEFT JOIN @A AS a ON a.aid = b.Aid                                    LEFT JOIN @C AS c ON a.aid = c.Aid                                    RIGHT JOIN @D AS d ON b.bid = d.bid                             WHERE  c.Deptid = 1                           ) V2 ON v1.Tbid = V2.bid

然后查询出,50321部门的动作配置

SELECT  b.bid ,c.cid ,b.NameFROM    @D AS d        LEFT JOIN @C AS c ON d.Cid = c.Cid        LEFT JOIN @B AS b ON d.Bid = b.BidWHERE   c.Deptid = 50321

 

 

 

转载于:https://www.cnblogs.com/Jolinson/p/3517847.html

你可能感兴趣的文章
HI3531uboot开机画面 分类: arm-linux-Ubunt...
查看>>
制作U盘启动CDLinux 分类: 生活百科 ...
查看>>
strcpy函数里的小九九
查看>>
搭建ssm过程中遇到的问题集
查看>>
OpenLayers绘制图形
查看>>
tp5集合h5 wap和公众号支付
查看>>
Flutter学习笔记(一)
查看>>
iOS10 国行iPhone联网权限问题处理
查看>>
洛谷 P1991 无线通讯网
查看>>
[HIHO1184]连通性二·边的双连通分量(双连通分量)
查看>>
Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf 【动态规划】0-1背包
查看>>
SparkStreaming 源码分析
查看>>
【算法】—— 随机音乐的播放算法
查看>>
mysql asyn 示例
查看>>
DataGrid 点击 获取 行 ID
查看>>
git 使用
查看>>
边框圆角方法
查看>>
asp.net WebApi自定义权限验证消息返回
查看>>
php中eval函数的危害与正确禁用方法
查看>>
20172315 2017-2018-2 《程序设计与数据结构》第十一周学习总结
查看>>