oracle - 更新 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);
解决方案
如果所有CNICNO
s 共享相同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);
推荐阅读
- r - 在 R 中使用 plm 进行样本外预测的具有三个指标的固定效应模型
- java - Junit实现以编程方式禁用测试功能的执行条件
- mysql - sql查询显示尚未订购/出现在发票上的产品
- java - 显示带变焦的前后摄像头
- xamarin - Xamarin Forms RelativeLayout 嵌套在 StackLayout 中无法设置高度
- terminal - 如何在 Eclipse RCP 产品的工具栏中隐藏终端图标?
- ruby-on-rails - 在 rails 的生产模式下,我的工人在模型中看不到任何东西
- ruby-on-rails - JRuby Rails 控制台挂在“切换到检查模式”上
- angular - 如何防止 TypeScript 代码块被 Angular AOT Webpack 插件编译
- angular - 如何在 Ionic 4 中进行触控操作?