2014-03-05 16 views
0

我正在嘗試移動數據並使用觸發器將其轉換爲另一個表。 我已經表設置和這個開發代號:在表中只創建新行

DELIMITER// 

CREATE TRIGGER move_data AFTER 
INSERT ON schema.old_table 
FOR EACH ROW 
BEGIN 


DECLARE num_id_before, num_id_after INT; 
SET num_id_before = (select count(id) FROM schema.old_table); 
SET num_id_after = (num_id_before - 7); 

INSERT INTO schema.new_table (name, street_address, 
      street_address_line_2, city, state, zip, country, fr_dob) 

SELECT MAX(CASE WHEN element_label = 0 THEN element_value end) AS name, 
    MAX(CASE WHEN element_label = 1 THEN element_value end) AS street_address, 
    MAX(CASE WHEN element_label = 2 THEN element_value end) AS street_address_line_2, 
    MAX(CASE WHEN element_label = 3 THEN element_value end) AS city, 
    MAX(CASE WHEN element_label = 4 THEN element_value end) AS state, 
    MAX(CASE WHEN element_label = 5 THEN element_value end) AS zip, 
    MAX(CASE WHEN element_label = 6 THEN element_value end) AS country, 
    MAX(CASE WHEN element_label = 7 THEN element_value end) AS dob 

FROM schema.old_table 
LIMIT num_id_after, num_id_before 
GROUP BY group_id 

END // 
DELIMITER; 

它目前作品,未經:

DECLARE num_id_before, num_id_after INT; 
SET num_id_before = (select count(id) FROM schema.old_table); 
SET num_id_after = (num_id_before - 7); 

和:

LIMIT num_id_after, num_id_before 

與這些代碼片段加入,我得到此錯誤:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'num_id_after, num_id_before GROUP BY group_id END' at line 22 

〜編輯:我知道這是基本上「一些不對的東西」的通用錯誤,但它可能有助於診斷,我是相當新的mysql

唯一的問題是,它會複製所有以前的數據它運行的時間而不是僅僅新添加的行。目前,舊錶格會設置數據,因爲每個值都是組中的單獨一行。我需要將它放在一個新表中,每個組在一行中。

任何人都可以幫忙嗎?隨意問更多的信息

+1

查詢結束時應該使用限制 –

+0

這不是「通用」。這精確地指出了錯誤發生的位置(在'num_id_after'單詞的左側或者之後)! – Strawberry

+0

我得到這個,如果我這樣做:錯誤代碼:1064.你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第23行'num_id_after,num_id_before END'附近使用正確的語法。 –

回答

1

由於@M哈立德·朱奈德的意見,更改條款的順序:

FROM schema.old_table 
GROUP BY group_id 
LIMIT num_id_after, num_id_before; 

END // 

GROUP BY子句總是LIMIT子句之前。它還需要;來結束查詢。

+0

正如我回復他的回答,它只是給我一個稍微不同的錯誤返回。 –

+0

添加';'結束查詢,:D,由於某種原因在答案 – Chococroc

+0

中更新,我需要讓它正常工作以便在觸發器時以某種方式中斷應用程序代碼。我不確定這是如何發生的,因爲它是「插入後」觸發器。否則,該代碼正常工作。當我添加限制時它會中斷。 –