使用相关子查询进行更新

时间:2014-08-14 10:49:01

标签: oracle sql-update sqlplus

我正在练习本书中的一些oracle示例到Oracle Express中,并且在使用相关子查询更新表时发现了一个问题。 这是表格,我想将其更新到公司最长任期的一定数量:

SQL> select * from employee;

    ID NAME                 MOBILE     ADDRESS                            SALARY HIRE_DATE DEPARTMENT_ID PROJECT_ID
     1 Maria                6985452    marias address                       1425 14-JAN-07             1
     2 Sonja                6988752    sonjas address                       1425 28-JUL-04             1
     3 Lilly                6965452    lillys address                       1425 11-JUN-01             2
     4 Martin               6974552    martins address                      1425 13-JUN-10             3
     5 Suzy                 6917452    suzys address                        1425 16-FEB-11             3
     6 Tom                  6945652    toms address                         1425 26-MAR-09             3
     7 Albert               6944452    alberts address                      1425 30-JAN-07             4
     8 Roger                6932152    rogers address                       1425 17-JUL-02             4
     9 Kara                 6941452    karas address                        1425 14-JUN-05             3

我尝试使用最低hire_date进行更新,并进行以下更新:

    SQL> update employee emp
      2  set salary = 1550
      3  where hire_date = (select min(hire_date)
      4  from employee
      5  where name = emp.name);

  9 rows updated.

它会忽略" min(hire_date),继续更新整个表格。我试图改变日期,但它没用。我非常确定解决方案是在我的面前,但我无法看到它!任何帮助人? 请...

1 个答案:

答案 0 :(得分:2)

问题在于您为表中的每个员工选择了MIN(hire_date) - 相反,您应该像这样对整个表格MIN(hire_date)

update employee emp
  set salary = 1550
where hire_date = (select min(hire_date) from employee);

此示例中无需将表连接在一起。