2011-02-08 5 views
2

я есть сотрудник таблицыОбновление с помощью Select Query в SQLServer

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

есть еще одна таблица под названием Отдел

DeptID DepName 
1  CS 
2  IS 
3  EE 
0  RR 

Запрос

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

по Exceuting Этот запрос набор результатов изменяет весь Дедид в таблице служащих на 7

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

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

ответ

0
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 
+0

ПРОБОВАЛО ВЫШЕПРИВЕДЕННЫЙ его подачу ошибки, информирующие неуместным О ГДЕ УСЛОВИЕ – happysmile

+0

@ Prince23 - Вы можете попробовать второй запрос в моем ответе и проверить, если это то, что вы хотите сделать ? –

+0

НЕХАТ ПОМОЧЬ МОЙ ВЫПУСК. – happysmile

0

Это установит весь DeptID в работнике до 7, где DeptID составляет 0

update Employee 
set DeptID = 7 
where DeptID = 0 

Employee.DeptID, вероятно, является внешним ключом от Department.DeptID, так что вы должны сначала убедиться, что существует a 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 

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

update employee 
set DeptID = 7 
where 
    exists(select * 
     from Department 
     where (DeptID = 0)) and 
    DeptID = 0 
+0

эй Mikael, выше, что-то siliar у меня в живой DB, я хотел сделать, как выше сказанное выше. – happysmile

+0

@ prince23 - Извините, я не понимаю, чего вы хотите. Является ли это утверждение обновления неправильным? Я думал, что вы хотите заменить DeptID на 7 для строк, где DeptID равно 0. Не так ли? –

Смежные вопросы