SQL Server根据2个表中的列在第3个表中创建行

时间:2018-03-22 17:06:57

标签: sql sql-server

我是一名SQL Server新手。我正在尝试创建测试数据。

我有一个包含10,000个零件号的表(表1)。

我有另一个包含仓库的表(表2)。

我有第三个表(表3),每个零件编号/仓库组合都包含一行。

表1将包含部件号,表2将包含6个仓库,表3将包含每个部件号/仓库的行。这意味着我将在Table3中以60,000行结束。我查看了所有的JOIN,但似乎无法找到一个完成工作的人。我想要做的是在名为On_Hand的列中加载Ta​​ble3,其中包含起始值为100的所有部件号/仓库行。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

INSERT INTO TABLE_3 ( Part_No, Location)    
SELECT Part_No, Location from InventoryTable CROSS JOIN LocationTable WHERE
       order by Part_No

答案 1 :(得分:0)

生成一些数据:

DECLARE @partNumbers TABLE
(
    PartNumber INT
)

DECLARE @warehouses TABLE
(
    Warehouse VARCHAR(20)
)

DECLARE @partNumberStart INT = 100

-- partnumbers 10000 starting at @partNumberStart  -- for testing.
 INSERT INTO @partNumbers
        SELECT @partNumberStart + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID FROM
       (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x1(x),
       (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x2(x),
       (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x3(x),
       (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x4(x)

--Warehouses 6 generated for testing
INSERT INTO @warehouses
        SELECT x1.x + CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS VARCHAR(20)) AS ID FROM
       (VALUES('Warehouse ')) x1(x),
       (VALUES(0),(1),(2),(3),(4),(5)) x2(x) --6
       --(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x2(x), --10

查询数据:

SELECT * FROM @warehouses LEFT JOIN @partNumbers on 1=1

--OR
SELECT * FROM @warehouses CROSS JOIN @partNumbers

--OR
SELECT * FROM @warehouses, @partNumbers

答案 2 :(得分:0)

你想cross join,像这样使用:

insert into inventory (part_no, warehouse_id, on_hand)  -- table_3
    select p.Part_No, w.warehouse_id, 500
    from Parts it cross join  -- table_1
         Warehouses w;        -- table_2