2011-10-17 149 views
6

我試圖用2個其他表中的記錄填充新表。MySQL將多個表中的記錄插入到新表中

period_states是新/空

period_states 
    id 
    period_id 
    sla_id 

時期 - 包含15條

periods 
    id 

的SLA - 包含84條記錄

slas 
    id 

我需要填充具有各自現有sla_id period_states每個退出period_id。因此,最終在period_states中應該有1260條記錄。

任何想法如何自動化這?這將是一個噩夢手動填充...

預先感謝您!

+1

表'period_states'中的'id'字段設置爲'auto_increment'嗎? –

回答

4
INSERT INTO period_states 
(period_id, sla_id) 
SELECT periods.id, slas.id 
FROM periods 
CROSS JOIN slas 
+0

我不是說我的回答是錯誤的,但從評論來看,它看起來像你打算接受@ spencer7593的回答 –

+2

你的答案是正確的。既然這是'選擇'的答案,我會在這裏添加一個評論,在MySQL中,'JOIN','INNER JOIN'和'CROSS JOIN'都是同義詞。 ANSI SQL規範將'CROSS JOIN'定義爲連接,而不產生笛卡爾積。在聲明中加入'CROSS'關鍵字(即使不需要)也可以作爲文檔(消除歧義並使意圖更清晰),並使聲明更易於移植到其他RDBMS。 – spencer7593

+1

@ spencer7593感謝您指出。爲了未來的讀者,我更新了答案。同樣投票你的答案的完整性 –

6

如果週期狀態的id列被定義爲AUTO_INCREMENT,那麼這應該工作:

INSERT INTO period_states (period_id, sla_id) 
SELECT p.id AS period_id 
    , s.id AS sla_id 
    FROM periods p 
CROSS 
    JOIN slas s 

而且這裏有一種方式的例子爲id列提供一個值:

INSERT INTO period_states (id, period_id, sla_id) 
SELECT @myid := @myid + 1 AS id 
    , p.id AS period_id 
    , s.id AS sla_id 
    FROM periods p 
CROSS 
    JOIN slas s 
CROSS 
    JOIN (SELECT @myid := 0) m 
+0

太棒了 - 就是這樣。這是我不知道的「交叉」功能。是的,period_states id是自動遞增的。謝謝你! –

+0

很高興爲你效勞凱蒂。 – spencer7593

2
insert into period_states select null, periods.id, slas.id from periods, slas 
相關問題