簡體   English   中英

根據輔助表中的行更新主表

[英]Update main table based on rows from a secondary table

我有一個員工抽獎類型的應用程序,表格如下所示:

Employee (ID, name, selectionCount)

Selections (employeeID, ipAddress)

現在,我需要一個更新查詢,該查詢將計算每個employeeID(具有唯一的IP地址)的選擇數量,並更新表Employee中的selectionCount列。

這樣的事情應該起作用:

WITH SelectionCounts(EmployeeId, SelectionCount)
AS
(
    SELECT s.EmployeeId, COUNT(DISTINCT IpAddress) AS SelectionCount
    FROM Selections s
    GROUP BY s.EmployeeId
)
UPDATE Employee
SET SelectionCount = sc.SelectionCount
FROM SelectionCounts sc
WHERE ID = sc.EmployeeId

沒有測試它,因此語法可能不完全正確。

update Employee
set selectionCount = (select count(distinct ipAddress) 
                        from Selections 
                       where Selections.emmployeeID = Employee.ID)

使用najmeddine解決方案,您可以將該代碼放入SQL Server中Selections表的插入和/或更新觸發器中:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER UpdateSelectionCount ON Selections
    AFTER UPDATE, INSERT
AS
BEGIN
    SET NOCOUNT ON

    UPDATE
        Employee
    SET
        selectionCount = (SELECT
                              COUNT(DISTINCT ipAddress)
                          FROM
                              Selections
                          WHERE
                              Selections.EmployeeID = Employee.ID)

END
GO

不是SQL Server專家,但是這樣的方法應該起作用:

update Employee a
   set selectionCount = (select count(*)
                           from Selections
                          where employeeID = a.ID)

順便說一句,我想您知道設計有些不規范,這在某些情況下可能是不希望的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM