У меня есть следующие 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
Я пытаюсь создать запрос с Тью следующими параметрами
- SiteId (1)
- AccountId (1)
- UserId (1)
С тех параметры запроса должны возвращать что-то вроде этого
SourceId | Name | Access
---------+--------------+---------
1 | Source 1 | 1
2 | Source 2 | 0
Столбец доступа является булевым (бит)
Таким образом, по существу запрос должен возвращать все источники (Id и Name), которые являются частью данного AccountId для данного SiteId, а также логическое указание, что пользователь имеет доступ к нему или нет.
Любая идея о том, как действовать?
Благодаря
EDIT: Для записи здесь есть запрос я придумал, но не работает:
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
Может быть стоит mentionning, что я бегу это на SQL Azure и SQL Server 2012
EDIT 2: Отношения
SiteAccount - Site - SiteUser - User
| \ |
Account - SourceAccount - Source - SourceUser
не совсем понятно, как связаны три таблицы, у вас есть четыре источника, каждый из которых относится к счету 1, является заголовком столбца правильно? но я думаю, что вы должны использовать левое внешнее соединение. – RoughPlace
. Что-то не складывается здесь, как источник 1, так и источник 2 связаны с идентификатором сайта 1 и идентификатором учетной записи 1 и где пользователь вписывается в ваши таблицы? –
Я фактически удалил таблицы Пользователя и Пользователя. Фактически, источники являются частями сайтов и доступны для учетных записей и в пределах учетных записей, доступных только определенным пользователям. –