我有一个复杂的问题,创建一个单一的SQL语句工作。 我有三个表,活动,无效和历史。它们是相同的,除了只有活动中的字段点标记为主键。MySQL插入重复更新
Struct:
-pointid int
-income_time timestamp
-outcome_time timestamp
-receipted_time timestamp
-type int
-isack int
林插入查询转换成活性使用“INSERT INTO活性(点名,income_time,outcome_time,receipted_time,类型,isack)VALUES(100,CURRENT_TIMESTAMP,NULL,NULL,15,0)ON DUPLICATE密钥更新.. ...
和需要帮助构造查询的结束,它将作为如下功能:
- 如果一行点名不存在,做简单的插入
- 如果它确实存在,检查是否类型是一样的,如果是,什么都不做
-if类型是不同的,和ack = 0,将行复制到非活动状态(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新当前行(类型,收入时间,isack)中的当前行。
-if类型如果不同且ack = 1,则将行复制到历史记录(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新当前行(类型,收入时间,isack)。
从逻辑上讲,我认为这可能使用IF语句,但尚未找到一个工作解决方案。有任何想法吗?
为什么只限于单个查询?一个简单的select然后是适当的INSERT,UPDATE或noaction将是明确的可读和主调。 – 2010-11-12 08:40:31