我想查询(SQL Server 2012),请执行以下操作: 将数据从一个表更新到另一个表,其中没有共同的可链接记录(非常确定我不能只是加入然后更新)。唯一的相似之处是表格具有相同的结构
保持简单(转移100多件物品)
所以,
我有什么:
--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条记录要设置,看起来似乎需要更简单的方法。在此先感谢,请原谅任何语法错误,因为我试图解释这个问题以保持简单(我很累!):)
答案 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
给出正确的输出