Конвертировать рабочий запрос 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 Начните использовать псевдонимы для ссылок на таблицы, ваш код может быть довольно трудно поддерживать позже.