四个表,

第一个 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下的动作11,  -- Aid - intN'状态1下的动作1' )
INSERT  INTO @B( Bid, Aid, Name )
VALUES  ( 2, -- id - int  name就可以说是状态1下的动作21,  -- Aid - intN'状态1下的动作2' )
INSERT  INTO @B( Bid, Aid, Name )
VALUES  ( 3, -- id - int name就可以说是状态2下的动作12,  -- Aid - intN'状态2下的动作1' )INSERT  INTO @B( Bid, Aid, Name )
VALUES  ( 4, -- id - int  name就可以说是状态2下的动作22,  -- Aid - intN'状态2下的动作2' )
INSERT  INTO @B( Bid, Aid, Name )
VALUES  ( 5, -- id - int name就可以说是状态2下的动作32,  -- Aid - intN'状态2下的动作3' )
INSERT  INTO @B( Bid, Aid, Name )
VALUES  ( 6, -- id - int name就可以说是状态3下的动作13,  -- Aid - intN'状态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 - int1, -- Aid - int  状态11  -- Deptid - int
          )
INSERT  INTO @C( Cid, Aid, Deptid )
VALUES  ( 2, -- id - int2, -- Aid - int  状态2      1  -- Deptid - int
          )
INSERT  INTO @C( Cid, Aid, Deptid )
VALUES  ( 3, -- id - int3, -- Aid - int   状态31  -- Deptid - int
          )
------50321
INSERT  INTO @C( Cid, Aid, Deptid )
VALUES  ( 4, -- id - int1, -- Aid - int   状态150321  -- Deptid - int
          )
INSERT  INTO @C( Cid, Aid, Deptid )
VALUES  ( 5, -- id - int2, -- Aid - int   状态250321  -- Deptid - int
          )
INSERT  INTO @C( Cid, Aid, Deptid )
VALUES  ( 6, -- id - int3, -- Aid - int   状态350321  -- 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下的动作11  -- Cid - int     部门1  和状态1
          ) INSERT  INTO @D( Bid, Cid )
VALUES  ( 2, -- Bid - int     状态1下的动作21  -- Cid - int      部门1  和状态1
          ) INSERT  INTO @D( Bid, Cid )
VALUES  ( 4, -- Bid - int      状态2下的动作22  -- Cid - int      部门1  和状态2
          ) INSERT  INTO @D( Bid, Cid )
VALUES  ( 5, -- Bid - int       状态2下的动作31  -- Cid - int        部门1  和状态2) 

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

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

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

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

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

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

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

INSERT  INTO @D( Bid ,Cid )SELECT  v1.Tbid ,v1.TcidFROM    ( SELECT    b.bid AS Tbid ,c.cid AS TcidFROM      @B AS bLEFT JOIN @A AS a ON a.aid = b.AidLEFT JOIN @C AS c ON a.aid = c.AidWHERE     c.Deptid = 50321) v1INNER JOIN ( SELECT b.bid AS bid ,c.cid AS cidFROM   @B AS bLEFT JOIN @A AS a ON a.aid = b.AidLEFT JOIN @C AS c ON a.aid = c.AidRIGHT JOIN @D AS d ON b.bid = d.bidWHERE  c.Deptid = 1) V2 ON v1.Tbid = V2.bid

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

SELECT  b.bid ,c.cid ,b.Name
FROM    @D AS dLEFT JOIN @C AS c ON d.Cid = c.CidLEFT JOIN @B AS b ON d.Bid = b.Bid
WHERE   c.Deptid = 50321

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

一个类似权限挂载的设计相关推荐

  1. 一个权限树的设计与实现

    如图,实现如下功能: 1,加载自动读出当前权限,自动展开(基本功能) 2,有一个选择/取消全部的功能(之前设计成独立的按钮,最后改成一个根目录的形式,如上图) 3,任何父级与子级的全选关系动态关联,具 ...

  2. asp.net 一个简易权限的小例子设计

    asp.net 一个简易权限的小例子设计 近日在阅读一本asp.net的书时(国人写的),其中提到了一个简易权限的小例子,感觉说的还是比较清楚,有点代表性, 故在此简单介绍下其实现原理    其核心是 ...

  3. php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...

    C++大富翁代码 所属分类:Windows编程 开发工具:C/C++ 文件大小:349KB 下载次数:6 上传日期:2018-05-15 21:11:38 上 传 者:红黑二叉树 说明:  现在要设计 ...

  4. Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?

    Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...

  5. ChatGPT 又整活了,从零开始设计并实现一个类似数独的游戏 Sumplete

    ChatGPT 又整活了.这次是从零开始设计并实现一个类似数独的游戏. 数独应该很多人都玩过,规则也很简单. 那能不能设计一款与数独类似的新游戏呢?国外有位叫 Daniel Tait 的工程师就想到了 ...

  6. 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计

    一.权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如何来优化"系统菜单"的结构而告终.今天 ...

  7. 一起谈.NET技术,C#权限管理和设计浅谈

    权限管理是很多软件中相当重要的一个模块它的设计的好坏直接影响到软件的安全性.权限管理的可扩展性和易操作性 以及代码中权限判断的复杂程度和效率等方面.此文主要想和大家分享的是这段时间,对权限管理和设计的 ...

  8. 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(Ngt;=4)种方法

    权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...

  9. J2EE开发之(六)之漫谈基于数据库的权限系统的设计

    一,权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如何来优化"系统菜单"的结构而告终.今天 ...

  10. 通俗易懂权限管理模块设计-Java

    最近一直在做CMS系统,发现一些内容其实都是重复出现的,例如权限管理模块.权限管理模块就是为了管理用户是否有权利访问某个权限,如果不能则拒绝访问.其实Java中已经有很成熟的权限管理框架,例如 Shi ...

最新文章

  1. 神经网络的可解释性综述!
  2. Plant Com:中科院遗传发育所白洋组开发定量检测宿主微生物组的HA-QAP技术(王二涛点评)...
  3. git svn 一个疯(傻)子的想法
  4. Linux磁盘分区了解多少?Linux入门必看
  5. AJAX04 JQ的AJAX
  6. 镜像电流源特点_MOS管电压型静电击穿特点
  7. 使用网刻工具进行局域网内的网络同传及联想电脑同传
  8. HTML问答页面模板,问答社区简单静态页面模板
  9. 电脑变慢,电脑越来越慢怎么办 电脑用久了网速变慢如何解决
  10. 内置函数--inline
  11. js复制一个数组(浅复制、深复制)
  12. matlab求系统根轨迹代码_怎么学习经典控制(结合MATLAB)
  13. 个人计算机操作系统支持多用户多任务,windows10是一个多用户多任务操作系统吗...
  14. Unity关于程序集(Assembly )的那些事
  15. C#(Csharp)笔记二十八——C# 文件的输入与输出
  16. 一台主机连接两台显示器单独分开工作
  17. 网页加载,只显示文字,不显示图片。(原因解决方法)
  18. 透视变换原理和变换矩阵的python实现
  19. BZOJ2548:[CTSC2002]灭鼠行动
  20. 一个完整的机器学习项目需要哪些步骤

热门文章

  1. 再谈设计模式之-1.单例模式
  2. 字典树(Trie树)的实现及应用
  3. Miniflter中 NPInstanceSetup调查
  4. linux游戏性能更好,linux游戏,linux游戏性能
  5. Eclipse启动报错:A java runtime Environment(JRE) or java Development……的解决办法
  6. css工程师技巧,web前端工程师必须掌握的技巧–CSS Sprites技术(附基础操作教程)...
  7. html项目组成员分工情况,分工.html · zhongjingxin/APP_I组_期末项目PRD文档 - Gitee.com...
  8. Linux网络子系统中报文的接收及NAPI的实现
  9. 好看的按钮设计HTML+CSS,漂亮的动画设计
  10. tomcat内存溢出解决方案_JVM了解以下?JVM系列~内存区域与内存溢出异常