ORA-01427:单行子查询返回多行更新SQL查询

时间:2019-05-15 08:47:25

标签: oracle oracle11g oracle10g oracle-sqldeveloper

我正在尝试更新找到重复的CNICNO的列并更新列。但我收到以下错误消息

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

当我查询以HOFID查找重复的CNICNO记录时,则显示5条重复的记录

重复记录查询:

SELECT hofid
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)

记录:

[1]: https://i.stack.imgur.com/ltC1m.png

在表“ WE_GROUP_HOF_K”中,列“ GROUP_ID”为空记录。我想用“ GROUP_ID”列更新“ HOFID”记录。

SQL查询:

UPDATE we_group_hof_k
SET group_id = (SELECT cnicno
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k));

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

错误消息几乎可以解决问题-您的子查询:

SELECT cnicno
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)

返回多行。但是UPDATE需要单个值,因此您必须确保子查询仅返回单个行。您需要确保子查询从不返回多行(您可以使用MAX()之类的聚合函数,但必须确保它满足您的业务需求)。

答案 1 :(得分:1)

除非我错了,否则UPDATE真的不应该是这样吗?

UPDATE we_group_hof_k w
   SET w.GROUP_ID =
          (SELECT h.cnicno
             FROM hof h
            WHERE h.cnicno = w.cnic_no);

将适当的列而不是IN与数据源表(we_group_hof_k)形成要更新的表(hof)。