Home > database >  Inserting set of rows for every ID in another table
Inserting set of rows for every ID in another table

Time:06-13

this is an initial table (this is just a part of a larger table where Article ID's can vary), database is MS Sql.

-----------------------------------
|ArticleID |     GroupID          |
-----------------------------------
|      1   |        NULL          |
-----------------------------------
|      2   |        NULL          | 
-----------------------------------
|      3   |        NULL          |
-----------------------------------
|      4   |        NULL          | 
-----------------------------------

Set of rows that should be entered for each ArticleID looks something like this:

------------------------
|      GroupID         |
------------------------
|         A            |
------------------------
|         B            | 
------------------------
|         C            |
------------------------
|         D            | 
------------------------

Result table should look something like this:

-----------------------------------
|ArticleID |     GroupID          |
-----------------------------------
|      1   |        NULL          |
-----------------------------------
|      1   |         A            | 
-----------------------------------
|      1   |         B            |
-----------------------------------
|      1   |         C            | 
-----------------------------------
|      1   |         D            | 
-----------------------------------
|      2   |        NULL          |
-----------------------------------
|      2   |         A            | 
-----------------------------------
|      2   |         B            |
-----------------------------------
|      2   |         C            | 
-----------------------------------
|      2   |         D            | 
-----------------------------------
|      3   |        NULL          |
-----------------------------------
|      3   |         A            | 
-----------------------------------
|      3   |         B            |
-----------------------------------
|      3   |         C            | 
-----------------------------------
|      3   |         D            | 
-----------------------------------
|      4   |        NULL          |
-----------------------------------
|      4   |         A            | 
-----------------------------------
|      4   |         B            |
-----------------------------------
|      4   |         C            | 
-----------------------------------
|      4   |         D            | 
-----------------------------------

Any suggestion how to insert it efficiently? Thanks a lot for you suggestion.

Regards

CodePudding user response:

This is a cross join between two sets.

with a as (
  select * from(values (1),(2),(3),(4))v(ArticleId)
), g as (
 select * from(values (null),('A'),('B'),('C'),('D'))v(GroupId)
)
select *
from a cross join g;

To insert into the original table you could do:

with g as (select * from(values('A'),('B'),('C'),('D'))v(GroupId))
insert into t
select t.ArticleId, g.GroupId
from t cross join g;

See Example Fiddle

  • Related