我有3张表如下
Table #1 has column UserId and UserName
Table #2 has column MenuId and MenuName
Table #3 has column MappingId, UserId, MenuId
(在表#3列中,UserId和MenuId分别与表#1 userId和表#2 MenuId具有外键关系。)
我想要像
这样的选择语句UserName, MenuName, AllowedDisallowedFlag
Where
UserName is Names of User From Table #1
MenuName is Names of Menu from Table #2
如果表#3中存在UserName和MenuName组合,则和AllowedDisallowedFlag
将为true,否则将为false。
有没有办法在不使用游标或循环的情况下实现此目的?
答案 0 :(得分:3)
你需要这样的东西:
SELECT DISTINCT
UserName,
MenuName,
CASE WHEN Table3.UserID IS NULL THEN 0 ELSE 1 END AS Allowed
FROM Table1
CROSS JOIN Table2
LEFT JOIN Table3 ON Table1.UserID = Table3.userID
AND Table3.MenuID = Table2.MenuID
答案 1 :(得分:0)
请尝试查询(我还没有执行):
SELECT
(SELECT UserName FROM Table#1 T1 WHERE T1.UserId=T2.UserID) AS UserName,
(SELECT MenuName FROM Table#2 T3 WHERE T3.MenuId=T2.MenuID) AS MenuName,
(CASE WHEN ISNULL(UserId,'')<>'' AND ISNULL(MenuID,'')<>'' THEN TRUE ELSE FALSE END) AS AllowedDisallowedFlag FROM Table#3 T2
注意:提供的UserID和MenuID是唯一的。