Удалить строку из таблицы sql, где значения не найдены в другой таблице с несколькими соединениями

У меня есть следующий запрос, который возвращает нужные данные. Что я хочу сделать, так это удалить эти данные, однако, когда я изменяю Select DQ. * на DELETE FROM DQ, я получаю сообщение об ошибке, указывающее, что

'... не подлежит обновлению, поскольку модификация влияет на несколько базовых таблиц'

Мне нужно удалить записи из таблицы tbaccess_groupPermission, где соответствующие записи модулей не найдены в таблице tbaccess_companyModules.

WITH DQ AS
(
SELECT GP.* FROM tbaccess_groupPermission GP
JOIN tbaccess_groups G ON GP.GroupID = G.ID
WHERE G.CompanyID=6
AND GP.RoleName NOT IN
(
select Distinct(R.RoleName)
FROM tbAccess_Roles R
INNER JOIN tbAccess_CompanyModules C on R.ModuleID = C.ModuleID
WHERE C.CompanyID = 6) 
) 
SELECT * FROM DQ

person Mark    schedule 02.09.2013    source источник


Ответы (1)


Почему бы не изменить оператор WITH, чтобы использовать предложение IN?

Что-то типа

WITH DQ AS
(
SELECT GP.* FROM tbaccess_groupPermission GP
WHERE GP.GroupID IN (SELECT G.ID FROM tbaccess_groups G WHERE G.CompanyID=6)
AND GP.RoleName NOT IN
(
select Distinct(R.RoleName)
FROM tbAccess_Roles R
INNER JOIN tbAccess_CompanyModules C on R.ModuleID = C.ModuleID
WHERE C.CompanyID = 6) 
) 
person Adriaan Stander    schedule 02.09.2013
comment
Хорошо, я пробовал это раньше, но попробовал еще раз, как было предложено, и это сработало! Спасибо!! 'УДАЛИТЬ ИЗ tbaccess_GroupPermission, ГДЕ Идентификатор В' - person Mark; 02.09.2013