我有以下3个表
来源
Id | Name | SiteId
---+--------------+---------
1 | Source 1 | 1
2 | Source 2 | 1
3 | Source 3 | 2
4 | Source 4 | 2
SourceAccount
SourceId | AccountId
---------+----------
1 | 1
2 | 1
3 | 1
4 | 1
SOURCEUSER
SourceId | UserId
---------+----------
1 | 1
3 | 1
我正在尝试使用以下参数构建查询
使用这些参数,查询应返回类似
的内容SourceId | Name | Access
---------+--------------+---------
1 | Source 1 | 1
2 | Source 2 | 0
访问列是布尔(位)
因此,本质上查询应该返回属于给定SiteId的给定AccountId的所有源(Id和Name)以及一个布尔告诉我用户是否可以访问它。
关于如何进行的任何想法?
由于
编辑: 这里的记录是我提出的但不起作用的查询:
SELECT s.[Id], s.[Name]
,(IF EXISTS (SELECT 1 FROM [dbo].[SourceUser] su WHERE su.SourceId = s.[Id] AND su.UserId = 1)
SELECT CAST(1 AS BIT)
ELSE
SELECT CAST(0 AS BIT))
FROM [dbo].[Source] s
INNER JOIN [dbo].[SourceAccount] sa ON sa.SourceId = s.Id
WHERE sa.AccountId = 1
AND s.SiteId = 1
也可能值得一提的是我在SQL Azure和SQL Server 2012上运行它
编辑2:关系
SiteAccount - Site - SiteUser - User
| \ |
Account - SourceAccount - Source - SourceUser
答案 0 :(得分:3)
试试这个:
SELECT s.[Id],
s.[Name],
CASE WHEN EXISTS (SELECT 1 FROM [dbo].[SourceUser] su WHERE su.SourceId = s.[Id] AND su.UserId = 1)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS Access
FROM [dbo].[Source] s
INNER JOIN [dbo].[SourceAccount] sa ON sa.SourceId = s.Id
WHERE sa.AccountId = 1 AND s.SiteId = 1