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

时间:2013-10-07 12:41:53

标签: sql-server sql-update sql-server-2012 inner-join union-all

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

保持简单(转移100多件物品)

  • 表1a:KEY,TagName< - 其中a.TagName如'Tag1'
  • 表1b:DS_KEY,Make,Model< - 更新数据的来源
  • 表2a:KEY,TagName< - 其中b.TagName如'Tag2'
  • 表2b:DS_KEY,Make,Model< - 更新数据的目的地

所以,

  • 表1a:123,Tag1
  • 表1b:123,Test1,Model1
  • 表2a:456,Tag2
  • 表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'

结果(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感到困惑。无法加入他们(至少我看不出来!)。 UNION ALL?真的希望我不需要

  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条记录要设置,看起来似乎需要更简单的方法。在此先感谢,请原谅任何语法错误,因为我试图解释这个问题以保持简单(我很累!):)

2 个答案:

答案 0 :(得分:1)

通常,当您想使用另一个表中的值更新一个表时,语法如下:

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

答案 1 :(得分:0)

您需要一个链接表来将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

给出正确的输出