【问题标题】:UPDATE a table with rows from another table using a CTE使用 CTE 更新具有来自另一个表的行的表
【发布时间】:2020-12-30 00:31:09
【问题描述】:

我需要使用 A_solarTypeDB.dbo.spaceList 中同一列中的值更新 B_solarTypeDB.dbo.spaceList 中所有行中的列

我在下面有这个 CTE,它返回 A_solarTypeDB.dbo.spaceList 中不在 B_solarTypeDB.dbo.spaceList 中的所有 astroID 值

有没有办法使用这些值对 B_solarTypeDB.dbo.spaceList 进行更新?

这是我对 CTE 的尝试:

UPDATE B_solarTypeDB.dbo.spaceList
SET astroID = 
;WITH CTE AS
(
    SELECT astroID FROM A_solarTypeDB.dbo.spaceList
    EXCEPT
    SELECT astroID FROM B_solarTypeDB.dbo.spaceList
)
SELECT astroID 
FROM A_solarTypeDB.dbo.spaceList
WHERE astroID IN (SELECT astroID FROM CTE)

但在“;”附近出现语法错误

这是来自 A_solarTypeDB.dbo.spaceList 的示例数据:

spaceID     spaceName    typeID     astroID
2937        Mars         1          9481ffg1
2938        Titan        3          4728ffu3
2939        MG1          7          4937fft5

我需要对 B_solarTypeDB.dbo.spaceList 进行更新,因为有时 astroID 的值为 NULL,而它应该与 A_solarTypeDB 数据库中的值相同。

谢谢!

【问题讨论】:

  • 具体的更新逻辑是什么?
  • @TimBiegeleisen 谢谢,我忘了包括那个。我已更新原始问题以显示我尝试的 UPDATE 命令和产生的错误。
  • 样本数据会很有帮助。
  • @TimBiegeleisen 好主意...:) 完成!
  • 您正在使用 CTE,就好像它是这里的查询一样。将 CTE 视为始终出现在查询本身之前的子查询。查询本身应以WITH myCTE as {} UPDATE 开头。

标签: tsql sql-server-2012 common-table-expression


【解决方案1】:

你可以在没有这样的 CTE 的情况下做到这一点:

    UPDATE typeBdb.dbo.spaceList
    SET astroID = T2.astroID
    FROM
    (
       SELECT astroID,CommonUniqueID
       FROM typeAdb.dbo.spaceList
       WHERE astroID IN 
       (
            SELECT astroID 
            FROM (
                        
                    SELECT astroID FROM typeAdb.dbo.spaceList
                    EXCEPT
                    SELECT astroID FROM typeBdb.dbo.spaceList
                    
               ) T1
    
       )
    ) T2
   WHERE typeBdb.dbo.spaceList.CommonUniqueID = T2.CommonUniqueID

【讨论】:

  • 将typeBdb.dbo.spaceList中的astroID设置为每一行的相同ID
  • 如果 typeBdb.dbo.spaceList 中有一个公共字段可以与 typeAdb.dbo.spaceList 匹配,则可以在末尾添加 WHERE 子句进行匹配。我已经更新了上面的查询来展示它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 2017-05-25
  • 1970-01-01
  • 2019-03-12
  • 2021-02-19
  • 1970-01-01
  • 2015-08-11
相关资源
最近更新 更多