创建一个比较难的视图

土不锅锅 2009-08-17 11:36:43
我想三个表
管理员表Administrator(adminId,adminName)
权限表Authority(authNo,authName)
权限访问表Access(adminId,authNo)

我想得到一个视图,里面拥有所有管理员的每个权限对应的访问许可,即(adminId,adminName,authNo,authName,isHave),isHave表示该管理员是否具有这个权限

比如管理员表有10条,权限表有8条,则视图应该有80条记录,每条记录分别标明管理员的是否具有这8种权限

create view(adminId,adminName,authNo,authName,isHave)
as
select adminId, adminName, authNo, authName, (???)
from Administrator cross join Authority

我用sql server,如果用left join,right join之类好像要加on子句,这样一旦权限关系表中还没有添加某个用户的权限关系,视图中就没有这个用户的任何记录了,望达人指教,不胜感激!
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2009-08-17
  • 打赏
  • 举报
回复
create view(adminId,adminName,authNo,authName,isHave) 
as
select
adminId,
adminName,
authNo,
authName,
isHave=case when isHave is null then 0 else 1 end
from
(
select a.*,b.adminId as isHave
from(select * from Administrator,Authority) a
left join Access b on a.adminId=b.adminId and a.authNo=b.authNo
) t

go
SQL77 2009-08-17
  • 打赏
  • 举报
回复
create view(adminId,adminName,authNo,authName,isHave) //VIEWNAME这样???
as
select adminId, adminName, authNo, authName, (???)
from Administrator cross join Authority
君_洛洛 2009-08-17
  • 打赏
  • 举报
回复
create view(adminId,adminName,authNo,authName,isHave)
as
select adminId, adminName, authNo, authName,
IsHave = CASE WHEN EXISTS(SELECT * FROM Access
WHERE A.adminId = adminId AND B.authNo = AuthNo)
THEN 1 ELSE 0 END
from Administrator AS A cross join Authority AS B;
--小F-- 2009-08-17
  • 打赏
  • 举报
回复
full join
SQL77 2009-08-17
  • 打赏
  • 举报
回复
FULL JOIN 试试
华夏小卒 2009-08-17
  • 打赏
  • 举报
回复
cross join ... on
guguda2008 2009-08-17
  • 打赏
  • 举报
回复
FULL JOIN

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧