Как вставить записи на основе другого табличного значения - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующие три таблицы:

Разрешение

| PermissionId | PermissionName |
+--------------+----------------+
| 1            | A              |
| 2            | B              |
| 3            | C              |
| 100          | D              |

Группа

| GroupId | GroupLevel | GroupName            |
+---------+------------+----------------------+
| 1       | 0          | System Administrator |
| 7       | 0          | Test Group 100       |
| 8       | 20         | Test Group 200       |
| 9       | 20         | test                 |
| 10      | 50         | TestGroup01          |
| 11      | 51         | TestUser02           |
| 12      | 52         | TestUser03           |

GroupPermission

| GroupPermissionId | FkGroupId | FkPermissionId |
+-------------------+-----------+----------------+
| 1                 | 1         | 1              |
| 2                 | 1         | 2              |
| 3                 | 1         | 3              |
| 4                 | 1         | 4              |

Мне нужно вставить записи в таблицу GroupPermission, если столбец таблицы Group, GroupLevel содержит 0 , тогда мне нужно взять его GroupId и нужно вставить значения в таблицу GroupPermission в качестве этого конкретного идентификатора и 100.

Для того, чтобы вы могли выполнить приведенные выше примеры записей таблицы, мне нужно вставить следующие две записи в таблицу GroupPermission,

| FkGroupId | FkPermissionId |
+-----------+----------------+
| 1         | 100            |
| 7         | 100            |

Как я могу это сделать

1 Ответ

1 голос
/ 06 ноября 2019

Этот вопрос не очень понятен, и я могу только предположить, что значение 100 является статическим значением, и что у вас фактически нет внешних ключей, как подразумевают названия столбцов. Кроме того, вы действительно должны избегать зарезервированных слов, таких как «Группа» для имен объектов. Это делает вещи более сложными и запутанными.

Простая версия вашей вставки может выглядеть следующим образом.

insert GroupPermission
(
    FkGroupId
    , FkPermissionId
)
select g.GroupId
    , 100
from [Group] g
where g.GroupLevel = 0

- EDIT -

Так как вы хотите вставить только те строки, которые еще не вставленысуществует, вы можете использовать НЕ СУЩЕСТВУЕТ, как это.

select g.GroupId
    , 100
from [Group] g
where g.GroupLevel = 0
    AND NOT EXISTS
    (
        select *
        from GroupPermission gp
        where gp.FkGroupId = g.GroupId
            and g.FkPermissionId = 100
    )

Или вы можете использовать левое соединение, как это.

select g.GroupId
    , 100
from [Group] g
left join GroupPermission gp on gp.FkGroupId = g.GroupId
            and gp.FkPermissionId = 100
where g.GroupLevel = 0
    and gp.FkGroupId is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...