【发布时间】:2020-04-02 20:42:50
【问题描述】:
假设我有一张名为 InsuranceMember 的表,其中包含保险计划的所有成员及其配偶。但是哦不!对于 CountryCD 为“Canada”且 PlanCD 为“99999”的配偶,此表中的 MemberNum(主键)均不正确!
但幸运的是,有一个名为 InsurancePlan 的表,其中包含配偶,并且这些配偶的 MemberNum(也是主键)都是正确的!
所以在这个假设中,我需要一个条件更新语句来设置 InsuranceMember.MemberNum = InsurancePlan.MemberNum where CountryCD = 'Canada' and PlanCD = '99999'
我如何编写查询来完成这项工作并更新每一行。
当我尝试编写此查询时,我总是会收到此错误: -811 UPDATE 语句的 set 子句中嵌入的 SELECT 语句或子选择的结果是一个多行的表,或者基本谓词的子查询的结果是多于一个值
这对作为 SQL 初学者的我来说非常困惑,但我确信我所描述的情况很多人都处理过。
编辑:这是我使用的生成该更新的代码示例:
UPDATE PRD.InsuranceMember mem
set mem.MemberNum = ( Select pln.MemberNum
from PRD.InsurancePlan pln
where mem.MemberNum <> pln.MemberNum
and mem.MoneySource = pln.MoneySource
)
WHERE mem.MemberNum = (SELECT pln2.MemberNum FROM PRD.InsurancePlan pln2
WHERE mem.ClientCd = pln2.ClientCd
AND mem.PLanCd = pln2.PlanCd)
AND Mem.MoneySource='3'
AND Mem.CountryCd = 'Canada'
AND Mem.PlanCd = '99999'
;
【问题讨论】:
-
请贴出产生错误信息的代码。
-
标记时要小心。 DB2 sql 服务器。
-
我相信您需要一个比 CountryCD 和 PlanCD 更严格的密钥。有了这个加入,不幸的是,更新将不起作用,因为 insurancePlan 中所有加拿大和 PlanCD 99999 的行将匹配 InsuranceMember 中的所有加拿大和 PlanCD 99999 行
-
您能否为您问题中的每个表格发布一个简化的
CREATE TABLE声明? -
下面是产生该错误的代码示例:
标签: sql db2 updates ibm-data-studio