要更新的SQL查询

时间:2013-10-15 03:53:37

标签: sql database oracle

我的这个表员工有列

name | salary
-------------
A    | 5000
B    | 2000
c    | 1000 
另一张桌子 适用于列

name| work
---------
A   | w1
A   | w2
A   | w3
B   | w4
B   | w5

我希望每个工作增加100个员工的工资,并且只有当工作量大于1时才更新。 任何人都可以帮我解决这个问题。我需要一个sql更新查询(没有存储过程或触发器或游标)。

2 个答案:

答案 0 :(得分:1)

这是正确的查询

update employee as a set salary = salary + 100 * NVL((
    SELECT count(*)
    FROM works as b
    where b.name=a.name
    group by name
    having count(*)>1), 0)

答案 1 :(得分:1)

请尝试使用合并声明:

MERGE
INTO    employee
USING   (
        select distinct "name", count(*) over (partition by "name") cnt from works
        )x
ON      (employee."name" = x."name")
WHEN MATCHED THEN
UPDATE
SET     salary = salary+(100*case when cnt=1 then 0 else cnt end);