0

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

保持简单(转移 100 多个项目)

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

所以,

  • 表 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'

结果(123、标签 1、123、测试 1、模型 1)

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

结果(456,标签 2,456,空,空)

返回我想要使用的混音。从这一点开始对如何更新 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 条记录要设置,似乎需要一种更简单的方法。提前致谢,请原谅任何语法错误,因为我试图解释问题以保持简单(我很累!):)

4

2 回答 2

1

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

UPDATE TableA SET TableA.Value = TableB.Value 
FROM TableA INNER JOIN TableB ON TableA.Key = TableB.Key
于 2013-10-07T12:48:23.630 回答
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

给出正确的输出

于 2014-03-25T23:32:42.757 回答