错误地更新查询

时间:2013-05-12 08:42:16

标签: oracle oracle11g

我有一个叫company_emp的表。在该表中,我有6个与员工相关的列:

  1. EMPID
  2. ENAME
  3. DOB
  4. doj,...
  5. 我有另一个名为bday的表。因为我只有2列; empid和dob。

    我有这个问题:

    select empid, dob 
    from company_emp 
    where dob like '01/05/2011'
    

    它显示了一些员工名单。

    以同样的方式我用表bday查询它列出了一些员工。

    现在我想更新日期为'01 / 05/2011'的员工的company_emp表。

    我尝试过这样的查询:

    update company_name a
     set dob = (select dob from bday b 
                where b.empid=a.empid 
                  and to_char(a.dob,'dd/mm/yyyy') = '01/05/2011'}
    

    然后该行中的所有记录都变为空。如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您正在更新company_name / emp表中的每一行。

您可以使用相关子查询修复该问题,以确保该行存在,或者通过在bday.empid上放置主键或唯一键来更有效地查询:

update (
  select c.dob to_dob,
         d.dob from_dob
  from   company_emp c join dob d on (c.empid = d.empid)
  where  d.dob = date '2011-05-01')
set to_dob = from_dob

语法未经测试。