2017-04-10 163 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