使用子选择更新查询

时间:2018-05-15 13:11:25

标签: db2

x_addr_table1

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

我正在尝试更新上表中的电子邮件,其中成员电子邮件的不同与其他电子邮件不同。

我正在尝试通过创建2个临时表来实现此目的。

x_primary_email_table2

Address_id,member_id,priemail1
7000012  56781  abcdef@gmail.com
7000015  56782  mnopqr@gmail.com

x_profilepay_email_table3

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标量全选的结果,SELECT INTO   声明或VALUES INTO语句不止一行。   SQLSTATE = 21000

感谢帮助。

1 个答案:

答案 0 :(得分:0)

您可以直接在源表

上执行此操作
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)