SQL查询以避免循环或游标获取记录

时间:2012-09-07 10:41:26

标签: sql

我有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。

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

2 个答案:

答案 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

这是SQL Fiddle

答案 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是唯一的。

相关问题