2012-03-11 48 views
0

我有2个表格:employeeemployeedetails单个查询中的SQL更新

employee看起来是这样的:

id  name 
---------------- 
1  Suresh 
2  Ram 
3  Ravi 

employeedetails看起来是这样的:

empid salary 
---------------- 
1  10000 
2  5000 
3  40000 

我想更新一个特定的人的salary领域。为此,我知道第一个表的员工姓名。基于此,我需要编写一个查询,以单个查询更新salary字段。我怎样才能做到这一点?

例如,如果我必须更新Ravi的薪水详细信息,我该如何在单个查询中执行此操作?

+0

更新用?它是什么 ? – 2012-03-11 16:48:48

+1

我相信你已经大大简化了数据库结构,但我可以问为什么员工信息是这样分开的吗?如果我理解正确,那肯定不是正常化 – 2012-03-11 20:48:06

回答

4
update employeedetails 
inner join employee on employeedetails.empid = employee.id 
set salary = 1000 
where employee.name = 'Ram' 
+1

我不认为拉姆会是快乐的兔子;-) – cspolton 2012-03-11 18:33:37

3

试试这个:

update employeedetails set salary=1000000 where empid in (select id from employee where name='suresh'); 
+0

我怀疑薪水是否是“文字”。 – 2012-03-11 16:55:06

0
UPDATE employeedetails det 
SET salary=100 
WHERE EXISTS (SELECT NULL 
       FROM employee emp 
       WHERE name='Ravi' 
       AND det.empid = emp.id 
      ) 
; 
+0

评论downvote将不胜感激。我提出了另一种方法来完成尚未提出的更新。 – 2012-03-11 21:24:34

+0

+1这个问题只有'sql'标记,你是标准的SQL并且被广泛实现(因为是我的:)被接受的答案是专有语法(SQL Server?)我认为你的答案比那些被接受的答案要好但SQL Server的民间用户肯定喜欢他们的专有语法;) – onedaywhen 2012-03-12 11:38:50

1
MERGE INTO employeedetails 
    USING employee 
     ON employeedetails.empid = employee.id 
     AND employee.name = 'Ravi' 
WHEN MATCHED THEN 
    UPDATE 
     SET salary = 10000;