【389天】我爱刷题系列148(2018.03.01)

@(一只心中无码的程序员)专栏程序员

叨叨两句

  1. ~

SQL习题043

题目描述
将全部获取奖金的员工当前的薪水增长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
相关文章
相关标签/搜索