2012-03-11 4 views
0

J'ai 2 tables: employee et employeedetails.Mise à jour SQL en requête unique

employee ressemble à ceci:

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

employeedetails ressemble à ceci:

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

Je veux mettre à jour salary champ d'une personne en particulier. Pour cela, je connais le nom de l'employé de la première table. Sur cette base, j'ai besoin d'écrire une seule requête qui mettra à jour le champ salary avec une seule requête. Comment puis-je faire ceci? Par exemple, si je dois mettre à jour les détails du salaire de Ravi, comment puis-je le faire en une seule requête?

+0

Updation? Qu'Est-ce que c'est ? –

+1

Je suis sûr que vous avez considérablement simplifié la structure de la base de données, mais puis-je demander pourquoi les informations sur les employés sont partagées comme ça? si je comprends bien, ce n'est certainement pas pour la normalisation –

Répondre

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

Je ne pense pas que Ram sera un lapin heureux ;-) – cspolton

3

Essayez ceci:

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

Je doute que le salaire soit 'text'. –

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

Un commentaire pour le downvote serait le bienvenu. J'ai proposé une autre façon de faire la mise à jour qui n'a pas encore été proposée. –

+0

+1 La question n'a que la balise 'sql', la vôtre est SQL standard et largement implémentée (comme la mienne :) La réponse acceptée est la syntaxe propriétaire (SQL Server?) Je pense que votre réponse est supérieure à celle acceptée pour ces raisons mais les gens de SQL Server sont sûrs de leur syntaxe propriétaire;) – onedaywhen

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