【问题标题】:ORA-01427: single-row subquery returns more than one row Update SQL QueryORA-01427: 单行子查询返回多行更新 SQL 查询
【发布时间】:2019-10-02 08:21:55
【问题描述】:

我正在尝试更新找到重复 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));

如何解决这个问题?

【问题讨论】:

  • 请澄清“更新列有重复项”的要求 - 如果您有重复项,您要更新哪些行,以及您要将 group_id 设置为什么值? (请在您的问题中添加示例输入和预期输出)

标签: oracle oracle11g oracle10g oracle-sqldeveloper


【解决方案1】:

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

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

返回多行。但是 UPDATE 需要一个值,所以你必须确保你的子查询只返回一行。您需要确保您的子查询永远不会返回多行(您可以使用像 MAX() 这样的聚合函数,但您必须确保它符合您的业务需求)。

【讨论】:

  • 我只想更新包含重复记录的列。使用简单查询 5 条记录重复
【解决方案2】:

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

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

将要更新的表 (we_group_hof_k) 中的相应列与数据源表 (hof) 连接起来,而不是 IN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多