Конвертировать рабочий запрос SELECT в запрос UPDATE

В SSMS 2014 у меня есть рабочий запрос SELECT и я хочу преобразовать его в оператор UPDATE, чтобы обновить поле в главной таблице. Я пробовал и пробовал много решений, каждое из которых приводит к отдельной ошибке.

Раньше мне удавалось выполнять простые запросы UPDATE SET WHERE, но это немного сложнее, используя производные таблицы в предложении WHERE. При поиске я нашел решение JOIN, но для меня оно не похоже на RIGHT или JOIN, и в этом решении SET была последней строкой, а SSMS это тоже не нравится, поэтому я немного запутался.

Это мой рабочий оператор SELECT, который выбирает правильные SKU:

SELECT        
    dbo.tblHKProducts.SKU_ID, dbo.tblHKProducts.SKU_Description, 
    dbo.tblHKProducts.SKU_Scan_Group
FROM
    dbo.tblHKProducts 
RIGHT OUTER JOIN
    (SELECT        
         tblHKProducts_1.SKU_ID, tblHKProducts_1.SKU_Description, 
         dbo.ForceScanByDescriptions.FindDescription
     FROM            
         dbo.tblHKProducts AS tblHKProducts_1 
     RIGHT OUTER JOIN
         dbo.ForceScanByDescriptions ON tblHKProducts_1.SKU_Description = dbo.ForceScanByDescriptions.FindDescription
     WHERE        
         (tblHKProducts_1.SKU_Description IS NOT NULL)
    ) AS derivedtbl_1 ON dbo.tblHKProducts.SKU_ID = derivedtbl_1.SKU_ID

Я пытаюсь сделать что-то вроде этого, SKU_Scan_Group это поле в tblHKProducts:

UPDATE dbo.tblHKProducts
SET SKU_Scan_Group = N'Yes'
RIGHT OUTER JOIN
    (SELECT        
         tblHKProducts_1.SKU_ID, tblHKProducts_1.SKU_Description, 
         dbo.ForceScanByDescriptions.FindDescription
     FROM            
         dbo.tblHKProducts AS tblHKProducts_1 
     RIGHT OUTER JOIN
         dbo.ForceScanByDescriptions ON tblHKProducts_1.SKU_Description = dbo.ForceScanByDescriptions.FindDescription
     WHERE        
         (tblHKProducts_1.SKU_Description IS NOT NULL)
     ) AS derivedtbl_1 ON dbo.tblHKProducts.SKU_ID = derivedtbl_1.SKU_ID

Любая помощь будет оценена!

Спасибо кев

1 ответ

Решение

Это довольно просто, на самом деле. Это должно работать:

UPDATE P
SET P.SKU_Scan_Group = N'Yes'
-- SELECT P.SKU_ID, P.SKU_Description, P.SKU_Scan_Group
FROM dbo.tblHKProducts AS P
RIGHT JOIN (
    SELECT P1.SKU_ID
        , P1.SKU_Description
        , FSBD.FindDescription
    FROM dbo.tblHKProducts AS P1
    RIGHT JOIN dbo.ForceScanByDescriptions AS FSBD
        ON P1.SKU_Description = FSBD.FindDescription
    WHERE P1.SKU_Description IS NOT NULL
    ) AS derivedtbl_1
    ON P.SKU_ID = derivedtbl_1.SKU_ID;

PS Начните использовать псевдонимы для ссылок на таблицы, ваш код может быть довольно трудно поддерживать позже.

Другие вопросы по тегам