我正在尝试将字段值从一个表更新到另一个表。
源代码表中的相同项目bomRev ='A'类似于
我想在partid
的目标表中更新bomRev=A
字段,使用源文件中的值,我希望目标看起来与源代码完全相同。
我试过这个但没有运气
UPDATE [MIBOMD]
SET [MIBOMD].[partId] = [assy].[partId]
FROM [MIBOMD] INNER JOIN [assy] ON [MIBOMD].[partId] = [assy].[partId]
WHERE bomRev='A' and [bomItem]='600797' AND [MIBOMD].[partId]!=[assy].[partId];
答案 0 :(得分:0)
UPDATE m
SET [partId] = a.[partId]
FROM
[MIBOMD] m
INNER JOIN
[assy] a
ON m.[bomItem] = a.[ItemId]
AND m.bomEntry = a.bomEntry
WHERE
m.bomRev='A'
AND m.[bomItem]='600797'
AND m.[partId]!=a.[partId];
你实际上非常接近!只是几个关键的区别。在我解释之前,我在我提供的代码中使用了表别名,这是在整个查询中引用表格的简便方法,这将使它更容易理解和阅读。要在from语句中的表名后面对表进行别名,只需添加一个空格和别名或空格“AS”别名。
现在您在版本中加入partid
,这是您的主要问题。因为您希望partid
不相同的记录,所以您可以更改partid
表的assy
。查看您的数据集,我能够确定共享密钥是mibomd.bomItem
和assy.ItemId
。清除完毕后,一切都应该是好的。
根据您的评论,唯一需要添加的其他内容是连接上的第二个条件,使其唯一。 [MIBOMD].bomEntry = assy.bomEntry
关于加入条件的一点点。通常,您总是希望弄清楚两个表之间的唯一关系(bomItem
= ItemId
和bomEntry = bomEntry
),这将是连接的ON区域中的内容。很少会有所不同,并且会用于非常特定的目的。
根据您对如何插入缺失记录的评论
INSERT INTO MIBOMD (bomItem, bomRev, bomEntry, lineNbr, dType, partId)
SELECT
bomItem = a.ItemId
,bomRev = 'A' --or change the value to what you want
,a.bomEntry
,lineNbr = ???? --not sure how you are figure this out do if you wan it to be the next line number you can figure that out automatically if you need
,a.partId
FROM
assy a
LEFT JOIN MIBOMD m
ON a.ItemId = m.bomItem
AND a.bomEntry = m.bomEntry
WHERE
m.bomItem IS NULL
这一次,您可以使用left join
中的assy
mibomd
来确定它们何时不匹配mibomd.bomItem IS NULL