sql多个插入一个表,同时循环/迭代另一个表?

Voo*_*ild 4 sql database sybase

我有两个表"TempStore"和"Store",它们的列名为"Items".

"TempStore"表中有数据需要转移到"Store"表,只需要很少的修改.

我需要迭代"TempStore"数据(即项目)并插入Store ...

更具体地说:我如何迭代TempStore(在sql中)"对于'TempStore'中的每个项目,我需要在'Store'中存储2个或者3个项目,只需稍加修改",我该如何实现?

我想要做的是从"[SELECT*FROM TempStore]"获取每个rowdata并在"Store"中插入三个记录,并且能够更改"items"

KM.*_*KM. 7

尝试INSERT-SELECT:

INSERT INTO Store
        (col1, col2, col3...)
    SELECT
        col1, col2, col3...
        FROM TempStore
        WHERE ...
Run Code Online (Sandbox Code Playgroud)

只需让SELECT为每个插入返回一行,并在Cols中生成所需的值.您可能需要CASE和另一个表的连接来创建额外的行.

编辑基于评论,OP希望看到数字表在行动

让我们说TempStore表有{Items,Cost,Price,ActualCost,ActualPrice}但是在Store表中我需要存储{Items,Cost,Price}.来自TempStore数据行的ActualCost和ActualPrice需要添加为Store中的另一行....(我希望这是有道理的)....无论如何,使用"WHILE-BEGIN-END"的解决方案?

CREATE TABLE Numbers (Number int NOT NULL PRIMARY KEY)
INSERT INTO Numbers VALUES(1)
INSERT INTO Numbers VALUES(2)
INSERT INTO Numbers VALUES(3)


INSERT INTO Store
        (Items, Cost, Price)
    SELECT
        t.Items, t.Cost
            ,CASE
                 WHEN n.Number=1 THEN t.Price
                 WHEN n.Number=2 THEN t.ActualCost
                 ELSE t.ActualPrice
             END
        FROM TempStore         t
            INNER JOIN Numbers N ON n.Number<=3
        WHERE ...
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用UNION:

INSERT INTO Store
        (Items, Cost, Price)
    SELECT
        t.Items, t.Cost, t.Price
        FROM TempStore t
    UNION ALL
    SELECT
        t.Items, t.Cost, t.ActualCost
        FROM TempStore t
    UNION ALL
    SELECT
        t.Items, t.Cost, t.ActualPrice
        FROM TempStore t
Run Code Online (Sandbox Code Playgroud)

无论是数字表或联盟将我们WAY比循环更好!

  • @DOK,永不循环,如果你不必,基于set是最快和最好的方式进入数据库 (3认同)
  • @VoodooChild,创建一个数字表:http://stackoverflow.com/questions/1393951/what-is-the-best-way-to-create-and-populate-a-numbers-table,你可以加入TempStore吧.创建Numbers表后,将其添加到选择:`INNER JOIN Numbers N ON n.Number <= 3` (2认同)