如何在 SQL Server 2014 中使用多个表和 INNER JOIN 更新 RowCount

How to UPDATE a RowCount using multiple tables and INNER JOIN in SQL Server 2014

我不知道这是否可以通过单个语句完成,但我想我会问一下。

SQLServer 2014 存储过程涉及 3 个表:

CREATE TABLE #TempTable 
(
    EntityID int,
    PrefType smallint,
    Col1 int,
    Col2 int
)

Table1
(
    EntityID int,
    PrefType smallint
)

Table2
(
    EntityID int,
    MyRowCount int
)

#TempTable 用于处理其他内容,现在只包含几行。我想使用来自 Table1 WHERE #TempTable.EntityID = Table1.EntityID AND #TempTable.PrefType = Table1.PrefType.

COUNT(*) 将这些行 UPDATE Table2.MyRowCount 用于相应的 EntityID

我试过这个:

UPDATE Table2 T2 
INNER JOIN (SELECT T1.EntityID,
                   COUNT(*) T1RowCount
            FROM Table1 T1, #TempTable2 TT 
            WHERE T1.EntityID = TT.EntityID 
              AND T1.PrefType = TT.PrefType
            GROUP BY T1.EntityID) AS T1Temp ON T1Temp.EntityID = T2.EntityID 
SET T2.MyRowCount = T1Temp.T1RowCount

但我收到语法错误(上面“UPDATE Table2 T2”中 T2 下的波浪线)告诉我:

Incorrect Syntax near 'T2'. Expecting SET.

在 INNER 和 AS 下面还有一条波浪线 'Incorrect Syntax'。

这可能是使用旧版本 SQL Server (2014) 的问题吗?或者我的 SQL wrong/not 可能吗?

正如@DaleK 已经评论的那样 - 有疑问时请查看 official documentation!那应该是你的第一站 - 永远。

阅读文档,您会发现必须使用此 SQL 语句:

-- UPDATE, then SET
UPDATE Table2
SET MyRowCount = T1Temp.T1RowCount
-- only then FROM and INNER JOIN
FROM Table2 T2
INNER JOIN (SELECT T1.EntityID,
                   COUNT(*) T1RowCount
            FROM Table1 T1, #TempTable2 TT 
            WHERE T1.EntityID = TT.EntityID 
              AND T1.PrefType = TT.PrefType
            GROUP BY T1.EntityID) AS T1Temp ON T1Temp.EntityID = T2.EntityID