2012-02-08 69 views
0

我有以下語句插入從一個表(文章)值到另一個(對話):更新的INSERT INTO外鍵... SELECT

INSERT INTO conversations (subject, user_id, notify_me, invite_only, real_name_only, max_post_length, last_updated_at, created_at, updated_at) 
SELECT subject, user_id, notify_me, invite_only, real_name_only, max_post_length, thread_updated_at, created_at, updated_at FROM posts WHERE ancestry IS null; 

每個插入之後,我想更新conversation_idposts指向新插入的conversations行。

完成此操作的最佳方法是什麼?

+0

這個查詢將插入多行。這些帖子看起來是對話的孩子,所以爲什麼你沒有該帖子關於對話的標識。 – 2012-02-08 19:49:38

+0

這是數據庫遷移的一部分。我正在創建表格會話,然後將相關數據從帖子移動到會話,然後通過在帖子上設置conversation_id來嘗試建立它們之間的關係。 – 2012-02-08 20:02:32

+0

然後只是遍歷結果集並使用LAST_INSERT_ID()更新帖子。如果您嘗試進行轉換,請在對話中禁用標識列。使用update語句更新posts.conversation_id,然後恢復標識。看起來你太努力了... – 2012-02-08 21:04:23

回答

1

我想你需要的是一個觸發:

DELIMITER $$ 

CREATE TRIGGER AFTER INSERT ON `conversations` FOR EACH ROW 
BEGIN 
    UPDATE posts 
     SET posts.conversation_id = NEW.Id 
     WHERE 
      posts.subject = NEW.subject 
      AND posts.user_id = NEW.user_id 
      AND posts.created_at = NEW.created_at; 
END$$ 
+0

'抱歉'不能更新存儲的函數/觸發器中的表'帖子',因爲它已經被調用此存儲函數/觸發器的語句使用 – 2012-02-08 20:31:42