2

我有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和AllowedDisallowedFlagMenuName 组合,则为真,否则为假。

有没有办法在不使用游标或循环的情况下实现这一点?

4

2 回答 2

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

这是一个SQL 小提琴

于 2012-09-07T10:47:13.330 回答
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 是唯一的。

于 2012-09-07T10:51:09.237 回答