使用另一个表中的值更新一个表列具有相似性

时间:2012-08-22 13:45:41

标签: oracle

嗨大家我有两个表(MIGADM.CORPMISCELLANEOUSINFO和CRMUSER.PREFERENCES),每个都有一个名为PREFERENCE_ID和ORGKEY的字段。我想使用来自每个相应ORGKEY的CRMUSER.PREFERENCES的Preference_ID更新MIGADM.CORPMISCELLANEOUSINFO的首选项ID。所以我写了这个查询;

update migadm.CORPMISCELLANEOUSINFO s set s.PREFERENCE_ID = (
select e.PREFERENCE_ID from crmuser.preferences e where s.ORGKEY = e.ORGKEY)

但我明白了:

ORA-01427: single-row subquery returns more than one row

我该怎么办?

2 个答案:

答案 0 :(得分:1)

这意味着您选择的列不够独特,无法识别源表中的一行。您的第一步是识别这些列。

要查看存在此问题的行集,请运行此查询。

select e.origkey, 
       count(*) 
  from crmuser.preferences e 
  group by e.origkey
  having count(*) > 1

例如:对于2的origkey,假设首选项表中有两行。

orig_key PREFERENCE_ID

2         202
2         201

Oracle不确定哪些应该用于更新CORPMISCELLANEOUSINFO中的preference_id列

答案 1 :(得分:1)

标识子查询返回多行的行(例如,可以使用REJECT ERROR子句来执行此操作)或使用条件'where rownum = 1'。