2017-04-10 167 views
1

我遇到了需要运行插入查询,这可能超出了我的专业知识。你可能会看到下面,我就像一只狗在这一点上追逐他的尾巴,我的代码不再正确。SQL插入选择选择查询

问题1:这只是没有做我所需要的,我很难得到它与一个查询。 问题2:它似乎对BOXES表中的每行执行4次。

我当前的代码:

INSERT INTO [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES_LINES] 
(
    [SALES_ORDER_NUMBER], 
    [SALES_ORDER_ID], 
    [SO_LINE_NUMBER], 
    [SO_LINE_ID], 
    [FINISHED_PART_NUMBER], 
    [QUANTITY], 
    [AOF_BOXES_ID] 
) 
    SELECT 
     [SALES_ORDER_NUMBER], 
     [SALES_ORDER_ID], 
     [SO_LINE_NUMBER], 
     [SO_LINE_ID], 
     [FINISHED_PART_NUMBER], 
     0, 
     b.[ID] 
    FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ALL_ORDER_LINES] AS aoL 
    LEFT JOIN [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES] AS b 
    ON b.[SELECTED] = 'True' 
WHERE EXISTS 
(
    SELECT oL.[SO_LINE_NUMBER] FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_OPTICS] AS oL WHERE oL.[SERIAL_NUMBER] = 'EOSBAB130004' 
) 

我需要INSERT INTO数据的一行包含从几个其他表选择的数据。关键是最后的WHERE语句。我需要从[AOF_ORDER_OPTICS]表中获得与我提供的[SERIAL_NUMBER]关联的[SO_LINE_NUMBER]

所有帮助表示赞赏。

+0

这是T-SQL我希望 –

+0

能不只是:JOIN AOF_ORDER_OPTICS AS醇对aoL.SO_LINE_NUMBER = oL.SO_LINE_NUMBER和ol [SERIAL_NUMBER] = 'EOSBAB130004' –

+0

你的钥匙在你的陈述中重复4次。你正在用'[dbo]。[AOF_BOXES]'做一个'LEFT JOIN'。 WETHER有一个BOX或NOT,你会得到一个价值。因此重复值。 – logixologist

回答

0

看起来您需要通过共同密钥将AOF_ALL_ORDER_LINES加入AOF_BOXES。如果没有共同的值来连接它们,或者可以从另一个中间表中派生出一个值,那么您将无法加入表格。尝试是这样的:

INSERT INTO [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES_LINES] 
(
    [SALES_ORDER_NUMBER], 
    [SALES_ORDER_ID], 
    [SO_LINE_NUMBER], 
    [SO_LINE_ID], 
    [FINISHED_PART_NUMBER], 
    [QUANTITY], 
    [AOF_BOXES_ID] 
) 
    SELECT 
     [SALES_ORDER_NUMBER], 
     [SALES_ORDER_ID], 
     [SO_LINE_NUMBER], 
     [SO_LINE_ID], 
     [FINISHED_PART_NUMBER], 
     0, 
     b.[ID] 
    FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ALL_ORDER_LINES] AS aoL 
    LEFT JOIN [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES] AS b 
    ON b.[SELECTED] = 'True' and b.SO_Line_Id=ol.So_Line_Id 
WHERE oL.[SERIAL_NUMBER] = 'EOSBAB130004' 

我们可能需要有关数据的详细信息,如果这不利于


替代你可以使用一个公用表表达式“假”的中间表加盟两个表:

with CTEboL as (
select 'EOSBAB130004' AS ser,'True' AS selected 

) 

INSERT INTO [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES_LINES] 
(
    [SALES_ORDER_NUMBER], 
    [SALES_ORDER_ID], 
    [SO_LINE_NUMBER], 
    [SO_LINE_ID], 
    [FINISHED_PART_NUMBER], 
    [QUANTITY], 
    [AOF_BOXES_ID] 
) 
    SELECT 
     [SALES_ORDER_NUMBER], 
     [SALES_ORDER_ID], 
     [SO_LINE_NUMBER], 
     [SO_LINE_ID], 
     [FINISHED_PART_NUMBER], 
     0, 
     b.[ID] 
    FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ALL_ORDER_LINES] AS aoL 
    Join CTEbol on aol.Serial_Number=CTEbol.ser 
    JOIN [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_BOXES] AS b 
    ON b.[SELECTED] = CTEbol.Selected and b.SO_Line_Id=ol.So_Line_Id 
+0

箱子表不包含'SO_LINE_ID'。如果这样做我不会处于这种困境:)我试图从'AOF_ORDER_OPTICS'表使用'SERIAL_NUMBER'作为参考获得'SO_LINE_ID'。我试图避免因为缺少那一条信息而必须做两个查询。这只是不好的形式。没有任何东西将光学表连接到其余的表。 – Jaberwocky