在计算之后将数据从一个表插入另一个表的过程

时间:2014-06-19 14:52:50

标签: mysql sql database stored-procedures

我有两张桌子 - 用户 小部件  "用户"中有数千名用户表。我创建了一个名为" widgets"的新表。现在每个用户都有5个不同的小部件,我需要在"小部件"中插入5个条目。 "用户"中每个条目的表格表。 这是详细的场景 -

"用户"表中有列 - " id"

"小部件"表格有列 - " user_id"," widgetId"," align"," priority"

并且对于每个user.id我想在"小部件中插入5条记录"像这样的表 -

来自用户表的第一个id,1,1,1

来自用户表的第一个id,2,2,2

来自用户表的第一个ID,3,3,3

来自用户表的第一个ID,4,4,4

来自用户表的第一个ID,5,5,5

来自用户表的第二个id,1,1,1

来自用户表的第二个ID,2,2,2

来自用户表的第二个ID,3,3,3

来自用户表的第二个ID,4,4,4

来自users表的第二个id,5,5,5 .................... ...............

我想创建一个相同的程序。请有人建议我怎么做。

1 个答案:

答案 0 :(得分:0)

我建议使用单独的默认表。这不仅可以在业务需求和产品增长时轻松调整默认值,还可以使用可用于其他目的的模板。

create table DefaultWidgets (widgetid INT, align INT, priority INT);
insert into DefaultWidgets values (1,1,1);
insert into DefaultWidgets values (2,2,2);
insert into DefaultWidgets values (3,3,3);
insert into DefaultWidgets values (4,4,4);
insert into DefaultWidgets values (5,5,5);

insert into widgets values (1,1,100,100);
-- mainly to demonstrate that a new row won't be inserted for user 1, widget 1.

INSERT INTO widgets
  SELECT id, r.widgetid, r.align, r.priority
  FROM users u
    CROSS JOIN DefaultWidgets R
  WHERE NOT EXISTS (
      SELECT 1
      FROM widgets w
      WHERE userid = u.id
        AND w.widgetid=R.widgetid
      );