【问题标题】:How to UPDATE a RowCount using multiple tables and INNER JOIN in SQL Server 2014如何在 SQL Server 2014 中使用多个表和 INNER JOIN 更新 RowCount
【发布时间】:2022-01-17 10:30:01
【问题描述】:

我不知道这是否可以做到是一个单一的声明,但我想我会问。

一个 SQL Server 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 下的波浪线)告诉我:

“T2”附近的语法不正确。期待 SET。

INNER 和 AS 下的另一条波浪线也带有“不正确的语法”。

这可能是使用旧版本 SQL Server (2014) 的问题吗?还是我的 SQL 错误/不可能?

感谢您的帮助。

【问题讨论】:

  • 如果您检查documentation,您会看到join(在更新中)您需要from,而set 位于from 之前。 (几乎就像错误告诉你的那样)。

标签: sql sql-server tsql inner-join


【解决方案1】:

正如@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 

【讨论】:

  • 感谢 @DaleK 和 marc_s 的解决方案。实际上,我查看了几个示例(包括dba.stackexchange.com/questions/56323/…)并将其用作指南,这显然是我没有直接阅读文档的错误。我更像是一个前端人员,但必须做一些后端工作,因此非常感谢您的帮助。干杯... :)
猜你喜欢
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2010-10-21
  • 2020-03-20
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多