【问题标题】:Convert working SELECT query into UPDATE query将工作 SELECT 查询转换为 UPDATE 查询
【发布时间】:2015-10-10 10:22:30
【问题描述】:

在 SSMS 2014 中,我有一个有效的 SELECT 查询,并希望将其转换为 UPDATE 语句以更新主表中的字段。我尝试并尝试了许多解决方案,每种解决方案都会导致不同的错误。

我之前已经设法执行简单的 UPDATE SET WHERE 查询,但是在 WHERE 子句中使用派生表会稍微复杂一些。在搜索时,我找到了一个 JOIN 解决方案,但对我来说,它不喜欢 RIGHT 或 JOIN,在那个解决方案中,SET 是最后一行,SSMS 也不喜欢这样,所以我现在有点困惑。

这是我选择正确 SKU 的有效 SELECT 语句:

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

任何帮助将不胜感激!

谢谢 凯夫

【问题讨论】:

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


    【解决方案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;
    

    附言 开始使用别名来引用表,您的代码以后可能会变得很难维护。

    【讨论】:

    • 嗨,谢谢你,它按我的意愿工作。你是对的我现在需要练习使用别名,因为你的代码更容易理解。谢谢!凯夫
    • 如果您对答案满意,请将其标记为正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多