Три таблицы соединения, подзапроса или что-то проще? - PullRequest
0 голосов
/ 15 февраля 2020

Мне было интересно, может ли кто-нибудь помочь мне с этим.

Это быстрое представление о гораздо более сложной схеме. Я хочу получить эту реализацию, которая является частью большего хранимого про c.

Так что в основном я ищу, чтобы получить набор результатов, который включает ClientId, Название компании, Setting1, Setting2 и Setting3.

Таким образом, если идентификатор компании не существует в таблице переопределения параметров, он подписывается на соответствующие параметры по умолчанию. Но если у них действительно есть идентификатор в таблице SettingsOverride, то набор результатов должен вернуть эти параметры.

enter image description here

Так что для этого примера набор результатов будет выглядеть как это:

enter image description here

1 Ответ

1 голос
/ 15 февраля 2020

Вы можете присоединиться дважды:

select
    c.clientId,
    c.companyName,
    coalesce(so.setting1, df.setting1) setting1,
    coalesce(so.setting2, df.setting2) setting2,
    coalesce(so.setting3, df.setting3) setting3
from company c
inner join defaul_settings cs on cs.clientId = c.clientId
left join settings_override so on so.companyId = c.companyId

Важнейшей частью является left join таблица settings_override, поэтому компании, которые не имеют переопределения, не исключаются из набора результатов. Затем вы можете использовать colasce(), чтобы использовать значение по умолчанию, когда нет переопределения.

...