MySQL将多个表中的记录插入到新表中

Kat*_*e M 6 mysql

我正在尝试使用来自其他2个表的记录来填充新表.

period_states是new/empty

 period_states
   id
   period_id
   sla_id
Run Code Online (Sandbox Code Playgroud)

期间 - 包含15条记录

periods
  id
Run Code Online (Sandbox Code Playgroud)

slas - 包含84条记录

slas
  id
Run Code Online (Sandbox Code Playgroud)

我需要在每个现有的sla_id中填充period_states,每个sla_id都有一个exiting period_id.所以,最终在period_states中应该有1260条记录.

知道如何自动化吗?手动填充将是一场噩梦......

先感谢您!!

spe*_*593 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
Run Code Online (Sandbox Code Playgroud)

这是一个为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
Run Code Online (Sandbox Code Playgroud)


hai*_*sin 4

INSERT INTO period_states
(period_id, sla_id)
SELECT periods.id, slas.id
FROM periods
CROSS JOIN slas
Run Code Online (Sandbox Code Playgroud)

  • 你的答案是对的。由于这是“选定”的答案,我将在这里添加一条注释,在 MySQL 中,“JOIN”、“INNER JOIN”和“CROSS JOIN”确实是同义词。ANSI SQL 规范将“CROSS JOIN”定义为不带产生笛卡尔积的条件的联接。在语句中包含“CROSS”关键字(即使不需要)确实可以作为文档(以消除歧义并使意图更加清晰),并使语句更容易移植到其他 RDBMS。 (2认同)