Db2 使用子选择更新查询

Db2 使用子选择更新查询,db2,Db2,x地址表1 Address_id,member_id,Primary,email1 7000012 56781 1 abcdef@gmail.com 7000013 56781 0 dummy@gmail.com 7000014 56781 0 abcdef@gmail.com 7000015 56782 1 mnopqr@gmail.com 7000016 56782 0 XYZXYZ@gmail.com 7000

x地址表1

Address_id,member_id,Primary,email1
7000012  56781    1     abcdef@gmail.com
7000013  56781    0     dummy@gmail.com
7000014  56781    0     abcdef@gmail.com
7000015  56782    1     mnopqr@gmail.com
7000016  56782    0     XYZXYZ@gmail.com
7000017  56782    0     mnopqr@gmail.com
我试图更新上表中的电子邮件,其中成员电子邮件不同于其他电子邮件

我试图通过创建两个临时表来实现这一点

x\u主要\u电子邮件\u表2

Address_id,member_id,priemail1
7000012  56781  abcdef@gmail.com
7000015  56782  mnopqr@gmail.com
x_档案付款_电子邮件_表3

Address_id,member_id,payemail1
7000013  56781  dummy@gmail.com
7000016  56782  XYZXYZ@gmail.com
以下是我的更新查询:

update x_addr_table1 x_addr 
set email1=(
  select T2.priemail1 
  from x_primary_email_table2 T2 
  where T2.member_id=x_addr.member_id
)
where x_addr.address_id in (
  select T2.address_id from x_primary_email_table2 T2
) and x_addr.member_id in (
  select T2.member_id 
  from x_primary_email_table2 T2, x_profilepay_email_table3 t3 
  where t2.member_id=t3.member_id and   
  upper(T2.priemail1)!=upper(T3.payemail1)
)
我在这里得到一个错误:

DB21034E命令作为SQL语句处理,因为它是 不是有效的命令行处理器命令。在SQL处理过程中 返回:SQL0811N标量fullselect的结果,选择到 语句,或值转换为多行语句。 SQLSTATE=21000


谢谢你的帮助

您可以直接在源表上执行此操作

update x_addr_table1 x
   set email = (select email 
                  from x_addr_table1 
                 where member_ID = x.member_id  and primary = 1)
 where Primary = 0
   and email <> (select email 
                  from x_addr_table1 
                  where member_ID = x.member_id  and primary = 1)