在没有ON DUPLICATE KEY的情况下在MySql中Upsert(没有过程的单个查询)

时间:2014-12-22 08:41:46

标签: mysql

我有两个表A,B。其中A是主表B是阶段表。许多阶段表被创建B(对于不同的状态[AP,MH,UP,TN ..]由这些状态提供的更新)存在并需要在表A月刊中进行upsert。

A- Id(Primery Key), Name, Email, ContactNumber, State, TimeStamp, Active(True, False)

A包含来自每个州的所有数据,最后更新日期为时间戳,带有标志。

B- Name, Email, ContactNumber

现在B被认为是来自州AP的更新。并且包含更新意味着,B可以删除一些较早的行,一些已添加并且可以具有相同的前一行。

我必须通过以这种方式对AP的所有更新进行评分(在名称,电子邮件,contact_number上),

  • IF行仅出现在A中Active_flag is False
  • IF在当前的两个UPDATE行中都显示为timestamp=now() and active_flag=True
  • 如果B中存在的行插入A并带有额外值STATE=AP and timestamp=now() and active=True

是否可以使用CASE, or IF-ELSE(它是否会快速而不是像第一次更新和插入那样使用多个查询)?

1 个答案:

答案 0 :(得分:0)

看来你正在寻找REPLACE INTO命令,如MySQL manual中所述,使用mysql的select语法(insert into sometable select * from anothertable),如下所示:

replace into mastertable m
select
  field1, field2, field3, now()
from
  stagetable s
outer join
  mastertable m2 on m2.id=s.id
where
  m2.ActiveFlag=true or m2.ActiveFlag is null

当然我没试过这个,但这是一般的想法。