У меня есть пара таблиц со следующей структурой:
Таблица применения:
AppId Name
====================
1 App 01
2 App 02
3 App 03
Таблица подписных приложений
SubAppId AppId SubId
==============================
1 1 99901
Мне нужно получить табличное приложение со всеми совпадениями SubscribeedApplications, и, если в нем нет записи, получить нулевые значения, отфильтрованные по SubId. Примерно так:
Ожидаемый результат:
AppId Name SubAppId SubId
==================================
1 App 01 1 99901
2 App 02 NULL NULL
3 App 03 NULL NULL
Я думал о правильном внешнем соединении, как это:
select Applications.AppId as AppId,
Applications.Name as AppName,
SubscribedApplications.SubAppId as SubAppId,
SubscribedApplications.SubId as SubId,
from SubscribedApplications
right outer join Applications on Applications.AppId = SubscribedApplications.AppId
where SubscribedApplications.SubId is null
or SubscribedApplications.SubId= '99901'
Однако этот подход не работает. Если я создаю запись в подписанных приложениях, скажем, для subid 99901, я получаю три записи, но если я запрашиваю 99902, я получаю только две записи. Я не могу понять почему. Я пробовал несколько вариантов этого, в том числе использование in (null, '99901') в предложении where, но безрезультатно.
Моя другая альтернатива - извлечь все записи из таблицы приложения, затем записи из записи SubscribeedApplication и в коде (C #) оценить, какие из них сохранить, но я бы хотел, чтобы это было в одном запросе, если это возможно.