Хорошо, вот как я интерпретирую ваш запрос: все «правила» состоят из двух привилегий.Найти всех пользователей, которые связаны с обеими привилегиями в правиле.
Я решил это с помощью Power Query.
Я использовал ваши образцы данных (я назвал Table1 «Пользователь» и Table2 «Правило») и создал таблицу результатов User_Rule.Вот окончательный запрос M от расширенного редактора.
let
Source = Rule,
#"Merged Queries" = Table.NestedJoin(Source, {"PRIVILEGE_1"}, User, {"PRIVILEGE"}, "User", JoinKind.LeftOuter),
#"Expanded User" = Table.ExpandTableColumn(#"Merged Queries", "User", {"USER"}, {"USER"}),
#"Reordered Columns" = Table.ReorderColumns(#"Expanded User",{"USER", "RULE_ID", "PRIVILEGE_1", "PRIVILEGE_2"}),
#"Merged Queries1" = Table.NestedJoin(#"Reordered Columns", {"PRIVILEGE_2", "USER"}, User, {"PRIVILEGE", "USER"}, "User", JoinKind.Inner),
#"Removed Columns" = Table.RemoveColumns(#"Merged Queries1",{"PRIVILEGE_1", "PRIVILEGE_2", "User"})
in
#"Removed Columns"
Как применено:
- Создать User_Rule как ссылку на правило
Выполнить слияние с пользователем в RULE.PRIVELEGE_1 и USER.PRIVILEGE.Используйте здесь левое соединение.
Развернуть столбец «Пользователь» из объединенной таблицы
Изменение порядка столбцов
Выполнить еще один запрос на слияние с пользователем.Обратите внимание, что это объединение состоит из двух полей и является внутренним, а не левым соединением.Удерживайте нажатой клавишу [Ctrl], чтобы выбрать более одного поля в диалоговом окне запросов на слияние.Убедитесь, что вы выбрали поля в том же порядке (маленькие цифры 1 и 2 появятся в заголовках столбцов, чтобы указать порядок).
Удалите ненужные поля.
Надеюсь, это поможет!