首页 > 试题广场 >

将所有获取奖金的员工当前的薪水增加10%

[编程题]将所有获取奖金的员工当前的薪水增加10%
  • 热度指数:115371 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
现有员工获取到的奖金简表emp_bonus如下:
  • emp_no指获取到奖金的员工编号;
  • bytpe指获取到的奖金类型。
emp_no btype
10001 1

有员工薪资简表salaries如下:
  • emp_no指员工编号;
  • salary指薪资;
  • from_date指该薪资的开始日期;
  • to_date指该薪资的结束日期。
emp_no
salary from_date to_date
10001
10001
85097.0
88958.0
2001-06-22
2002-06-22
2002-06-22
9999-01-01

请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工,不考虑获取的奖金的类型)。
以上示例更新后的结果salaries为:
emp_no
salary from_date to_date
10001
10001
85097.0
97853.8
2001-06-22
2002-06-22
2002-06-22
9999-01-01
注:只需写出更新语句,后台会执行以下SQL语句,将更新后的结果与预期结果对比:
select * from salaries;

示例1

输入

drop table if exists  emp_bonus; 
drop table if exists  `salaries` ; 
create table emp_bonus(
emp_no int not null,
btype smallint not null);
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary`  float(11,1) default NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
insert into emp_bonus values(10001,1);
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');

输出

10001|85097.000|2001-06-22|2002-06-22
10001|97853.800|2002-06-22|9999-01-01
UPDATE salaries s
SET salary = salary*1.1
WHERE salary IN (
    SELECT salary
    FROM emp_bonus
    WHERE emp_no = s.emp_no
) 
    AND to_date = '9999-01-01';

发表于 2024-04-01 12:21:13 回复(0)
update salaries set salary=salary*1.1
where to_date='9999-01-01' and
emp_no in (select distinct emp_no from emp_bonus);

发表于 2024-02-07 11:13:19 回复(0)
update salaries s 
inner join emp_bonus e on s.emp_no=e.emp_no 
set salary=salary*1.1 
where s.to_date='9999-01-01'
发表于 2023-11-14 20:38:53 回复(0)
update salaries
set salary=1.1*salary
where emp_no in (select distinct emp_no from emp_bonus)
and to_date='9999-01-01'

发表于 2023-03-17 18:41:27 回复(0)
update salaries set salary=salary*1.1
where to_date='9999-01-01' and emp_no in(
    select emp_no 
    from emp_bonus
);

发表于 2022-12-28 14:33:17 回复(0)
感觉考察的就是update的使用,并没有太复杂,
update salaries set salary=salary*1.1 where to_date='9999-01-01' and emp_no in (select emp_no from emp_bonus)
发表于 2022-10-23 09:56:15 回复(0)
update salaries
set salary = salary+salary*0.1
where to_date='9999-01-01'
and emp_no in (select emp_no from emp_bonus)
发表于 2022-07-25 09:26:44 回复(0)
update 
salaries n
join emp_bonus b 
on n.emp_no = b.emp_no
and n.to_date = '9999-01-01'
set 
n.salary = n.salary*1.1

发表于 2022-06-21 13:41:36 回复(0)
update salaries set salary = (salary + 0.1*salary) 
where emp_no in (select emp_no from emp_bonus) and to_date = '9999-01-01'
发表于 2022-06-12 19:36:08 回复(0)
update salaries 
set salary = salary * 1.1
where emp_no in (
    select emp_no
    from emp_bonus
) and to_date = "9999-01-01";
发表于 2022-06-02 17:08:11 回复(0)
update salaries sa,emp_bonus em set sa.salary=sa.salary*1.1
where sa.to_date="9999-01-01" and sa.emp_no=em.emp_no
发表于 2022-05-31 17:21:16 回复(0)
update salaries ss set ss.salary= ss.salary*1.1
where ss.to_date='9999-01-01' and  exists(
select emp_no from emp_bonus
)
我想用一下exists,但是emp_bonus表中不存在的数据也给我加薪了是为啥啊,求指教,不理解了
发表于 2022-05-24 21:34:35 回复(0)
发表于 2022-05-13 10:58:35 回复(0)
update 
    salaries
set 
    salary=salary*1.1
where 
    emp_no in
    (
    select emp_no from emp_bonus
    )
and
    salaries.to_date='9999-01-01';

发表于 2022-04-26 19:50:55 回复(0)
update salaries
set salary=salary*(1+0.1)
where emp_no in (select emp_no from emp_bonus)
and to_date='9999-01-01'

发表于 2022-04-18 12:11:27 回复(0)
update salaries 
set salary = salary*1.1 
where emp_no in 
    (
        select emp_no from emp_bonus
    )
and to_date='9999-01-01'
发表于 2022-04-17 19:26:16 回复(0)
UPDATE salaries S
SET salary=salary*1.1
WHERE S.to_date='9999-01-01' AND S.emp_no IN 
(SELECT emp_no
FROM emp_bonus) 
我刚开始以为是用case when做的,不理解这个题目到底要干啥

发表于 2022-04-05 18:51:31 回复(0)
update salaries set salary=salary*1.1
where emp_no in (select emp_no from emp_bonus) and to_date='9999-01-01'

发表于 2022-03-20 10:03:38 回复(0)