【发布时间】:2015-06-04 07:38:28
【问题描述】:
我有以下 3 个表
来源
Id | Name | SiteId
---+--------------+---------
1 | Source 1 | 1
2 | Source 2 | 1
3 | Source 3 | 2
4 | Source 4 | 2
来源账户
SourceId | AccountId
---------+----------
1 | 1
2 | 1
3 | 1
4 | 1
来源用户
SourceId | UserId
---------+----------
1 | 1
3 | 1
我正在尝试使用以下参数构建查询
- 站点 ID (1)
- 帐户 ID (1)
- 用户 ID (1)
使用这些参数,查询应该返回类似这样的内容
SourceId | Name | Access
---------+--------------+---------
1 | Source 1 | 1
2 | Source 2 | 0
访问列是布尔值(位)
因此,从本质上讲,查询应该返回作为给定 SiteId 的给定 AccountId 一部分的所有源(Id 和名称)以及一个告诉我用户是否有权访问它的布尔值。
知道如何进行吗?
谢谢
编辑: 为了记录,这里是我想出但不起作用的查询:
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
【问题讨论】:
-
这三个表之间的关系并不完全清楚,您有四个来源,每个来源都与帐户 1 相关,列标题是否正确?但我的想法是你应该使用左外连接
-
这里没有加起来,Source 1 和 Source 2 都与站点 id 1 和帐户 id 1 相关,用户在您的表格中的位置是什么?
-
我实际上剥离了 Account 和 User 表。事实上,来源是网站的一部分,可用于帐户,并且仅在某些用户可用的帐户内
-
帐户 - SourceAccount - 来源 - SourceUser - 用户帐户 - 用户
-
哇,这看起来不像任何东西......将在问题中添加它
标签: sql sql-server azure azure-sql-database