读书人

SQL语句求高手帮助!解决方案

发布时间: 2012-03-26 15:46:56 作者: rapoo

SQL语句,求高手帮助!
有以下三张表:
◆ 权限表(Permission):
权限ID(PID)权限名(PName)
P001读取
P002追加
P003删除

◆ 用户表(User):
用户ID(UID)用户名(UName)
U001赵用户
U002钱用户
U003孙用户

◆ 权限分配表(PermissionAssign):
权限ID(PID)用户ID(UID)
P001U001
P001U002
P001U003
P002U002
P002U003
P003U002


请写出实现以下查询结果的SQL语句。
用户ID用户名权限ID权限名是否有权限
U001赵用户P001读取是
U001赵用户P002追加否
U001赵用户P003删除否
U002钱用户P001读取是
U002钱用户P002追加是
U002钱用户P003删除是
U003孙用户P001读取是
U003孙用户P002追加是
U003孙用户P003删除否


[解决办法]

SQL code
--> 测试数据:[Permission]if object_id('[Permission]') is not null drop table [Permission]create table [Permission]([PID] varchar(4),[PName] varchar(4))insert [Permission]select 'P001','读取' union allselect 'P002','追加' union allselect 'P003','删除'--> 测试数据:[USER]if object_id('[USER]') is not null drop table [USER]create table [USER]([USERID] varchar(4),[USERNAME] varchar(6))insert [USER]select 'U001','赵用户' union allselect 'U002','钱用户' union allselect 'U003','孙用户'--> 测试数据:[PerAssign]if object_id('[PerAssign]') is not null drop table [PerAssign]create table [PerAssign]([PID] varchar(4),[USERID] varchar(4))insert [PerAssign]select 'P001','U001' union allselect 'P001','U002' union allselect 'P001','U003' union allselect 'P002','U002' union allselect 'P002','U003' union allselect 'P003','U002'SELECT C.USERID AS 用户ID,C.USERNAME AS 用户名,C.PID AS 权限ID,C.PName AS 权限名,CASE WHEN D.PName IS NULL THEN '否' ELSE '是'END AS 是否有权限 FROM(SELECT * FROM [USER] CROSS JOIN [Permission])CLEFT JOIN(SELECT A.PID,A.USERID,B.PName FROM [PerAssign] A LEFT JOIN [Permission] B ON A.PID=B.PID)D ON C.USERID=D.USERID AND C.PID=D.PID /* 用户ID    用户名    权限ID    权限名    是否有权限U001    赵用户    P001    读取    是U001    赵用户    P002    追加    否U001    赵用户    P003    删除    否U002    钱用户    P001    读取    是U002    钱用户    P002    追加    是U002    钱用户    P003    删除    是U003    孙用户    P001    读取    是U003    孙用户    P002    追加    是U003    孙用户    P003    删除    否*/ 

读书人网 >SQL Server

热点推荐