创建单个SQL语句时,我遇到了一个复杂的问题。 我有三个表,活动,非活动和历史。它们是相同的,除了只有活动中的字段指针被标记为主键。
Struct:
-pointid int
-income_time timestamp
-outcome_time timestamp
-receipted_time timestamp
-type int
-isack int
我使用“INSERT INTO active(pointid,income_time,outcome_time,receipted_time,type,isack)VALUES(100,CURRENT_TIMESTAMP,NULL,NULL,15,0)在DUPLICATE KEY UPDATE上插入查询到活动状态..... < / p>
并且需要帮助来构造查询的结尾,它将起到以下作用:
- 如果指针的行不存在,请执行简单的插入
- 如果确实存在,请检查类型是否相同。如果是的话,什么也不做
-if type为diffenent,ack = 0,copy row为inactive(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新active(current,income_time,isack)中的当前行。
-if type如果不同,并且ack = 1,则将行复制到历史记录(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新active中的当前行(type,income_time,isack)。
答案 0 :(得分:0)
我认为这超出了单个查询的能力。它不能有条件地更新不同的表。您可以使用触发器,编写存储过程,或者只是拥有一个不需要此的理智架构。