关于如何分离 UpdateTarget 和 Filter

Posted

技术标签:

【中文标题】关于如何分离 UpdateTarget 和 Filter【英文标题】:Over how to separate UpdateTarget and Filter 【发布时间】:2020-02-14 08:26:58 【问题描述】:

想象一下带有列的下表

TrackingID | CompletionIndicator | Flag2

现在我想用Completion Indicator = 0 计算跟踪 ID 级别的所有位置,但我想更新跟踪 ID 级别。

使用下面的代码只更新带有 0 的行。 (逻辑上!)。但是如何将过滤器和更新目标分开呢?

UPDATE UPDATETarget
SET Flag2 = New_Index
FROM (
    SELECT Flag2
        ,COUNT(*) OVER (
            PARTITION BY TrackingID ORDER BY id DESC
            ) AS New_Index
    FROM [dbo].Feedback
    WHERE CompletionIndicator = 0
    ) AS UPDATETarget

【问题讨论】:

我正在使用 MS SQL 2014,抱歉我现在标记了它。 【参考方案1】:

如果我理解正确,您可以在此表中包含多个 TrackingID 条目。 所以可能这会做你想做的事,有点老式,更推荐使用 WITH

UPDATE FB
SET Flag2 = Src.NewIndex
FROM [dbo].Feedback AS FB
    JOIN    
        (SELECT TrackingID, COUNT(*) AS NewIndex
        FROM [dbo].Feedback 
        WHERE CompletionIndicator = 0
        GROUP BY TrackingID) AS Src
        ON Src.TrackingID = FB.TrackingID;

我建议始终先使用 SELECT 仔细检查您希望通过该查询更新的内容。

SELECT FB.*, Src.NewIndex
FROM [dbo].Feedback AS FB
    JOIN    
        (SELECT TrackingID, COUNT(*) AS NewIndex
        FROM [dbo].Feedback 
        WHERE CompletionIndicator = 0
        GROUP BY TrackingID) AS Src
        ON Src.TrackingID = FB.TrackingID;

【讨论】:

你应该把它改成LEFT JOIN 如果 David 想要更新所有表,那么是的,你是对的,应该是 LEFT JOIN,我仍然不确定任务 。 . OP 暗示查询应该使用 0 值更新行。

以上是关于关于如何分离 UpdateTarget 和 Filter的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Ajax.ActionLink 更新整个页面而不仅仅是 UpdateTarget

FileCoin 挖矿教程之三:发送与接收 FIL

西部世界:关于Fil试错的成本为何

如何选择fil矿机厂商?fil挖矿哪家靠谱?

使用 MockJs — 实现真正的前后端分离

您如何在 CSS 中拆分或分离链接,例如。家,关于我们的链接