我正在尝试更新找到重复的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));
如何解决这个问题?
答案 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
)。