2011-10-17 54 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 
相关问题