Обновление с использованием Select Query в Sqlserver - PullRequest
2 голосов
/ 08 февраля 2011

у меня есть сотрудник таблицы

DeptID  Name
1       manu
2       kiran
3       anu
4       manoj
0       peter
0       Kumar
0       mike

есть еще одна таблица с именем Department

DeptID  DepName
1        CS
2        IS
3        EE 
0        RR

Query

update employee
set DeptID = 7 where  exists(   
SELECT * FROM   Department WHERE (DeptID = 0))

. При выполнении этого запросаНабор результатов изменяет все значения DepID в таблице сотрудников на 7

Я хотел изменить только DeptID на 7, где DeptID равен «0».Это пример, который я пытаюсь вам сказать.в моей реальной базе данных у меня есть проблема, подобная этой

, пожалуйста, помогите мне, как решить проблему. Спасибо

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

При этом для всех DeptID сотрудника будет установлено значение 7, где DeptID равно 0

.
update Employee
set DeptID = 7
where DeptID = 0

Employee.DeptID, вероятно, является внешним ключом от Department.DeptID, поэтому сначала необходимо убедиться, что существует Department с DeptID = 7.

В ваших выборочных данных у вас есть отдел с именем 'RR'. Если это тот, который вы хотите использовать, но с DeptID = 7 вы можете сделать это следующим образом.

-- Add Department with DeptID = 7
insert into Department(DeptID, DepName)
select 7, DepName
from Department
where DeptID = 0

-- Change DeptID to 7 for Employee's with DeptID = 0
update Employee
set DeptID = 7
where DeptID = 0

-- Delete Department
delete Department
where DeptID = 0

Редактировать 1 Это также будет работать, но я не вижу смысла его использовать. Ваше заявление об обновлении изменено, чтобы обновлять только сотрудников с DeptID=0

update employee
set DeptID = 7
where
  exists(select *
         from Department
         where (DeptID = 0)) and
  DeptID = 0
0 голосов
/ 08 февраля 2011
update employee
set DeptID = 7 where  exists(   
SELECT * FROM   Department WHERE (DeptID = 0))
where DeptID = 0

Вы должны добавить еще одно условие к своему заявлению об обновлении.

Если вы просто обновляете всех сотрудников, у которых DeptID = от 0 до 7, вам не нужно использовать подзапрос.следующий запрос будет делать -

update employee
set DeptID = 7
where DeptID = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...