Пожалуйста, помогите мне с SQL-запросом, который я пытаюсь написать
Я хочу удалить IITESE из всех partID, чьим родителем является CTSC. но я получил эту ошибку, говоря
Сообщение 512, уровень 16, состояние 1, строка 3 Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Мой запрос
delete from [KRISADMIN].[CompartmentACL] where CompartmentID = (select CompartmentID from [KRISADMIN].[Compartment] where Name = 'CTSC') and
TrusteeID = (select RoleID from [KRISADMIN].[Role] where Name = 'IITSE') and TrusteeType = 2
Пожалуйста, извините мой запрос, если он не очень хорош.
1 ответ
Решение
Вы можете использовать =, когда подзапрос возвращает только 1 значение.
Когда подзапрос возвращает более 1 значения, вам придется использовать IN
или же EXISTS
:
С помощью IN
:
delete from [KRISADMIN].[CompartmentACL]
where CompartmentID IN (select CompartmentID
from [KRISADMIN].[Compartment]
where Name = 'CTSC')
and TrusteeID IN (select RoleID
from [KRISADMIN].[Role]
where Name = 'IITSE')
and TrusteeType = 2
Узнайте больше здесь.
РЕДАКТИРОВАТЬ:
Вам нужно заменить =
с IN
:
delete from [KRISADMIN].[CompartmentACL]
where CompartmentID IN (select CompartmentID
from [KRISADMIN].[Compartment]
where Name in (Select Name
from [KRISADMIN].[Compartment]
where ParentID IN (Select ParentID
from [KRISADMIN].[Compartment]
where Name = 'CTSC') ))
and TrusteeID IN (select RoleID
from [KRISADMIN].[Role]
where Name = 'IITSE')
and TrusteeType = 2