将工作SELECT查询转换为UPDATE查询

时间:2015-10-10 10:22:31

标签: sql-server select join outer-join derived-table

在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 个答案:

答案 0 :(得分:0)

实际上,这很简单。这应该有效:

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;

<强> P.S。 开始使用别名来引用表,以后您的代码可能会很难维护。