首页 > 解决方案 > 更新 SQL 查询单行子查询返回多行时出错

问题描述

我有 2 个表“HOF”和“WE_GROUP_HOF_K”

在“HOF”表中共有“2066666”条记录

在“WE_GROUP_HOF_K”表中共有“116”条记录

我有 SQL 查询,他从 2 个表“HOF”和“WE_GROUP_HOF_K”中找到带有 hofid 列的重复 cnicno 列

此查询共找到“120”个重复的 cnicno 记录

询问:

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

在“WE_GROUP_HOF_K”表中有 1 个空列“GROUP_HOF_ID”。现在我想将“HOFID”列的重复记录更新为“GROUP_HOF_ID”列

更新记录时出现此错误:

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

更新 SQL 查询:

UPDATE we_group_hof_k wg
 SET wg.GROUP_HOF_ID =
      (SELECT h.hofid
         FROM hof h
        WHERE h.cnicno = wg.cnic_no);

标签: oracleoracle11goracle10goracle-sqldeveloper

解决方案


如果所有CNICNOs 共享相同HOFID,则使用DISTINCT

UPDATE we_group_hof_k wg
 SET wg.GROUP_HOF_ID =
      (SELECT DISTINCT h.hofid           --> here
         FROM hof h
        WHERE h.cnicno = wg.cnic_no);

如果没有,HOFID你想拿哪个?MIN或者MAX也会有帮助,例如

UPDATE we_group_hof_k wg
 SET wg.GROUP_HOF_ID =
      (SELECT MIN(h.hofid)               --> here
         FROM hof h
        WHERE h.cnicno = wg.cnic_no);

推荐阅读