2010-11-12 196 views
0

我有一個複雜的問題,創建一個單一的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語句,但尚未找到一個工作解決方案。有任何想法嗎?

+0

爲什麼只限於單個查詢?一個簡單的select然後是適當的INSERT,UPDATE或noaction將是明確的可讀和主調。 – 2010-11-12 08:40:31

回答

0

我認爲這超出了單個查詢的能力。它不能有條件地更新不同的表格。你可以使用觸發器,編寫一個存儲過程,或者只需要一個不需要這個的健全的模式。

+0

如果使用觸發器,這將如何完成? – Alexander 2010-11-12 08:06:39

+0

您編寫了一個程序,執行所有您想要的檢查並完成所有這些條件查詢。在SQL中。 http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html – 2010-11-12 10:19:02