Пожалуйста, помогите мне с 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 
Другие вопросы по тегам