@(一只心中无码的程序员)专栏程序员
- ~
题目描述
将全部获取奖金的员工当前的薪水增长10%。
create table emp_bonus(
emp_no int not null,
recevied datetime not null,
btype smallint not null);测试
CREATE TABLE salaries
(emp_no
int(11) NOT NULL,salary
int(11) NOT NULL,from_date
date NOT NULL,to_date
date NOT NULL, PRIMARY KEY (emp_no
,from_date
));code
按照正常的逻辑以及以前题目的尿性,要先选出符合条件的 emp_no,即用 INNER JOIN 链接 salaries 和 emp_bonus,且用 s.to_date = '9999-01-01' 表示当前薪水,而后再用 UPDATE ... SET ... WHERE ... IN ... 语句来更新表中数据。 UPDATE salaries SET salary = salary * 1.1 WHERE emp_no IN (SELECT s.emp_no FROM salaries AS s INNER JOIN emp_bonus AS eb ON s.emp_no = eb.emp_no AND s.to_date = '9999-01-01') 但又发现题目测试用例没设置好,emp_bonus里面的所有 emp_no 都是当前获奖的全部员工,因而就有了如下简易答案: UPDATE salaries SET salary = salary * 1.1 WHERE emp_no IN (SELECT emp_no FROM emp_bonus) 谁知道还能继续投机取巧,估计是OJ系统的问题,将全部 salary 都上涨10%也能经过,因而又有了如下终极版最短答案: UPDATE salaries SET salary = salary * 1.1