Как использовать подзапрос, который дал более одного результата - PullRequest
2 голосов
/ 18 августа 2011

Мой SQL-запрос

UPDATE Task SET Done = 1 WHERE (ID = (SELECT ID FROM User WHERE UserName = @UserName) 

Я попытался и получил ошибку:

Подзапрос вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.Оператор был прерван.

Есть ли какой-нибудь возможный способ сделать это (например, цикл for)?Спасибо

Ответы [ 4 ]

6 голосов
/ 18 августа 2011

Как идентификатор строки будет равен более чем одному значению?

Это не имеет смысла, поэтому написание такого запроса невозможно.

Проверка наличия идентификатора в наборе имеет смысл, хотя ...

...WHERE ID IN (SELECT ID...

4 голосов
/ 18 августа 2011

Вы можете использовать оператор IN.

WHERE ID IN (SELECT ID FROM User WHERE UserName = @UserName)
1 голос
/ 18 августа 2011

ОБНОВЛЕНИЕ Задачи УСТАНОВЛЕНО = 1 ГДЕ ИДЕНТИФИКАТОР (ВЫБЕРИТЕ ИДЕНТИФИКАТОР ОТ ГДЕ ГДЕ UserName = @UserName)

0 голосов
/ 18 августа 2011

Как насчет следующего. Вы можете использовать простые объединения так же, как в инструкциях SELECT:

UPDATE Task t, User u 
SET t.Done = 1 
WHERE t.ID = u.ID
AND u.UserName = @UserName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...