将数据从一个表更新到另一个没有通用标识符的表

Posted

技术标签:

【中文标题】将数据从一个表更新到另一个没有通用标识符的表【英文标题】:Update data from one table to another with no common identifier 【发布时间】:2013-10-07 12:41:53 【问题描述】:

我希望查询 (SQL Server 2012) 执行以下操作: 将数据从一个表更新到另一个没有共同可链接记录的表(很确定我不能只是加入然后更新)。唯一的相似之处是表的结构相同

保持简单(传输 100 多个项目)

表 1a: KEY, TagName 表 1b:DS_KEY、品牌、型号 表 2a: KEY, TagName 表 2b:DS_KEY、品牌、型号

所以,

表 1a:123,标签 1 表 1b:123,测试 1,模型 1 表 2a:456,标签 2 表 2b:456,NULL,NULL

我有什么:

 --Query 1
 SELECT KEY, TagName, DS_KEY, Make, Model
 FROM Table1a
 JOIN Table1b
 ON Table1a.KEY = Table1b.DS_KEY
 Where TagName = 'Tag1'

RESULT(123, Tag1, 123, Test1, Model1)

 --Query 2
 SELECT KEY, TagName, DS_KEY, Make, Model
 FROM Table2a
 JOIN Table2b
 ON Table2a.KEY = Table2b.DS_KEY
 Where TagName = 'Tag2'

RESULT(456, Tag2, 456, NULL, NULL)

返回我想要使用的混音。从这一点开始对如何更新 Table2b 感到困惑。不能加入他们(至少我不知道怎么做!)。也许联合所有?真的希望我不需要

  Update Table2b 
  Set Table2b.Make = 
  (SELECT Make FROM Table1a
  JOIN Table1b
  ON Table1a.KEY = Table1b.DS_KEY)
  FROM Table2a
  JOIN Table2b
  ON Table2a.KEY = Table2b.DS_KEY
  Where Table2a.TagName = 'Tag2'

就像我说的,我有大约 100 条记录要设置,似乎需要一种更简单的方法。提前致谢,请原谅任何语法错误,因为我试图解释问题以保持简单(我很累!):)

【问题讨论】:

这是一个可以使用的示例。如果这不起作用,请告诉我,因为我从未使用过 SQL Fiddle! sqlfiddle.com/#!6/db2fa/4 有人可以在这里提供一些见解吗? 【参考方案1】:

一般来说,当你想用另一个表中的值更新一个表时,语法是这样的:

UPDATE TableA SET TableA.Value = TableB.Value 
FROM TableA INNER JOIN TableB ON TableA.Key = TableB.Key

【讨论】:

没错,但我看不出如何加入 Table1a/Table1b 和 Table2a/Table2b 数据,因为它们之间没有共同的 KEY 可以加入 那么,你的问题真的是两个表之间的记录匹配问题吗?发布一些表格内容的示例以及您希望如何匹配记录,也许这里有人可以帮助您编写适当的 JOIN 标准。 第一次这样做,所以我希望这个链接有效! sqlfiddle.com/#!6/db2fa/4 那个样本够丹吗?如果没有,我可以添加更多或尝试重新创建实际的表(不过可能需要做很多工作!) @FrankandBeans 让我看看我是否理解正确:您要更新 Table2b,以便 Key1 = 456 的记录更新其其他列(品牌和型号)以匹配 Table1b 和 Key1 的列= 123. 这是正确的吗?我猜想您不仅需要更新 Table2b 中的一条记录 - 所以给定 Table1b 中的 Key1,Table2b 中的 Key1 应该是什么? Table1a 和 Table1b 的意义何在 - 在我看来,它们没有提供任何有用的信息。【参考方案2】:

您需要一个链接表来关联 Tag1 和 Tag2。改变你的小提琴如下: 向您添加架构:

create table linking_table
(
  PK int not null primary key,
  TagName_a varchar(50),
  TagName_b varchar(50)
  )
insert into linking_table (PK, TagName_a, TagName_b)
values (1,'Tag1','Tag2')

然后查询2变成:

SELECT Table2a.KEY1,Table2a.TagName,Table2b.DS_KEY, Table1b.Make, Table1b.Model
FROM (Table2a
JOIN Table2b
ON Table2a.KEY1 = Table2b.DS_KEY)
JOIN linking_table
ON Table2a.TagName = linking_table.TagName_b
JOIN (Table1a
JOIN Table1b
ON Table1a.KEY1 = Table1b.DS_KEY)
ON Table1a.TagName = linking_table.TagName_a

给出正确的输出

【讨论】:

以上是关于将数据从一个表更新到另一个没有通用标识符的表的主要内容,如果未能解决你的问题,请参考以下文章

标识符过程无效

Org.Hibernate.AnnotationException:没有为实体指定标识符我的表中没有 id

SQL将值从一个表列更新到另一个[重复]

如何将数据从一个表移动到另一个表并更新外键 (T-SQL 2008)

MySQL中如何把一个数据库中的表数据,导到另一个数据库的表中

如何更新没有任何数据的行以唯一标识该行?