Вставка нескольких строк в SQL с помощью SubQuery - PullRequest
0 голосов
/ 09 июля 2020

Предположим, у меня есть 2 таблицы.

Roles                                  Rights

Id  | Name                        Id | Type | Name
--------------------             -----------------

100 | 1001_MgmtAdmin             999 | User | Rename
200 | 2001_MgmtAdmin
300 | 3001_MgmtAdmin

и я хотел бы создать следующие записи в существующей таблице (например, RolesRightsMapping)

RolesRightsMapping

Id | RoleId | RightsId
----------------------

900 |  100   | 999
800 |  200   | 999
1000|  300   | 999

Я использую SQL Sub Query поскольку я не вижу другого варианта, но он говорит: «Подзапрос возвращает более одной записи, которую нельзя использовать, когда она используется в качестве выражения или содержит операторы>, <=,> = '

INSERT INTO RolesRightsMapping
VALUES ( SELECT Id FROM Roles.Id WHERE Name Like 'MgmtAdmin', SELECT Id FROM Rights WHERE Name = 'Rename' and Type = 'User' )

Я даже сохраняю результат SubQuery в массиве, а затем вставляю результаты обратно с помощью оператора SELECT, но получаю ту же ошибку.

Любая помощь, как можно получить результаты, показанные в приведенной выше таблице?

Ответы [ 2 ]

0 голосов
/ 09 июля 2020
 INSERT INTO RolesRightsMapping(RoleId,RightsId)
      SELECT roles.id,rights.id from Roles,rights 
    where INITCAP(Roles.Name) LIKE 'MgmtAdmin' 
AND rights.Name = 'Rename' AND rights.Type = 'User';
0 голосов
/ 09 июля 2020

Используйте insert . . . select:

INSERT INTO RolesRightsMapping (RoleId, RightsId)
    SELECT r.Id, ri.id
    FROM Roles r CROSS JOIN
         Rights ri
    WHERE r.Name Like 'MgmtAdmin' AND
          ri.Name = 'Rename' AND ri.Type = 'User'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...