【问题标题】:Import Column info from one table to another from non-unique identifier从非唯一标识符将列信息从一个表导入到另一个表
【发布时间】:2015-03-23 09:35:42
【问题描述】:

我有两个表,表 A 包含我要传递的信息,表 B 我要接受信息。 (19 列 varchar)。

他们共同拥有的唯一列是“ItemTitle”(不要问,我没有创建它)所以我试图根据 ItemTitle 匹配导入。我的问题是在表 A 中的 ItemTitle 是唯一的,但在表 B 上可能有许多同名。

我想将列信息导入到所有包含相同 ItemTitle 的行,而不仅仅是它找到的第一个。

可以这样做吗?

这是我尝试过的:(我只使用了 1 列的集合来查看它是否有效) 它没有。错误消息 4104,级别 16,状态 1,第 29 行 无法绑定多部分标识符“prodData.ItemTitle”。

SELECT prodData.[prodID]
      ,prodData.[Item]
      ,prodData.[ParentItem]
      ,prodData.[ItemTitle]
      ,prodData.[15]
      ,prodData.[16]
      ,prodData.[17]
      ,prodData.[18]
      ,prodData.[19]
      ,prodData.[20]
      ,prodData.[21]
      ,prodData.[22]
      ,prodData.[23]
      ,prodData.[24]
      ,prodData.[25]
      ,prodData.[26]
      ,prodData.[27]
      ,prodData.[28]
      ,prodData.[29]
      ,prodData.[30]
      ,prodData.[31]
      ,prodData.[32]
      ,prodData.[33]
    From [database].[dbo].[tbl_ProductInfoDump] as prodData
    Inner Join [database].[dbo].[tbl_ProductFilterDump] as filterData 
    on filterData.ItemTitle = prodData.ItemTitle


Update [database].[dbo].[tbl_ProductInfoDump] set [15] = (Select [15] from [database].[dbo].[tbl_ProductFilterDump] as filterData where filterData.ItemTitle = prodData.ItemTitle)

【问题讨论】:

    标签: sql sql-server import merge dml


    【解决方案1】:

    您必须使用带有连接的更新,或从选择中更新(无论您想命名它)。

    这个想法是将目标表 (B) 与源表 (A) 连接起来,并将 B 的每一行所进行的更新作为连接 A 行的列的值。

    你可以在这里找到一个很好的解释:SQL SERVER – UPDATE From SELECT Statement – Using JOIN in UPDATE Statement – Multiple Tables in Update Statement。查询如下所示:

    UPDATE B
    SET
       Col1 = A.Col1,
       Col2 = A.Col2
    FROM B
    INNER JOIN A ON A.Title = B.Title
    

    当然,您可以包含其他过滤器 (whereclause) 来限制更新的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2022-11-21
      • 1970-01-01
      相关资源
      最近更新 更多