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と外部キーの関係にあります。)

次のようなselectステートメントが必要です

UserName, MenuName, AllowedDisallowedFlag

Where 

UserName is Names of User From Table #1

MenuName is Names of Menu from Table #2

UserNameとAllowedDisallowedFlagMenuNameの組み合わせが表3に存在する場合はtrueになり、存在しない場合はfalseになります。

カーソルやループを使用せずにこれを実現する方法はありますか?

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 に答える