我很少在与SQL交易中使用update语句,并且在这样做时会有点紧张。在之前的一期中,我提出了它,我决定在一些表中添加一个标识列作为代理键。考虑到170万行,我希望尽可能顺利地完成这项工作。所以我需要做的是运行一个循环更新并使用相关数据更新每个字段。
表1:tblPostCodeLookup
Postcode | Postcode ID
AB44 | 1
AB45 | 2
表2:tblPostcodeStreetView
ID | Postcode | Postcode ID
1 | AB446TR | 1
2 | AB447TY | 1
3 | AB457HH | 2
我已经做了基本的更新
UPDATE tblPostcodesStreetsView
SET PostcodeID = 1
WHERE (postcode LIKE 'AB44%')
然而,让这个经历并更新每一个导致我的问题!
答案 0 :(得分:6)
UPDATE psv
SET PostcodeID = pcl.PostcodeID
FROM tblPostcodesStreetsView psv
INNER JOIN
tblPostCodeLookup pcl
on
pcv.postcode LIKE pcl.postcode + '%'
应该做的伎俩。除非tblPostCodeLookup
中有多个行与tblPostcodesStreetsView
中的同一行匹配 - 在这种情况下,PostCodeID
分配的行没有明确定义。
UPDATE
...FROM
是SQL Server方言,它不是标准SQL。标准方法类似于:
UPDATE tblPostcodesStreetsView
SET PostcodeID = (select pcl.PostcodeID from tblPostCodeLookup pcl
where tblPostcodesStreetsView.postcode LIKE pcl.postcode + '%')
对于我提到的多场比赛的上述场景,至少会产生错误。
答案 1 :(得分:1)
完整性检查结果如何:
SELECT tblPostcodeStreetView.Postcode
, tblPostCodeLookup.Postcode
, tblPostCodeLookup.Postcode_ID
FROM tblPostcodeStreetView
INNER
JOIN tblPostCodeLookup
ON tblPostcodeStreetView.Postcode LIKE tblPostCodeLookup.Postcode + '%'
将此作为更新声明
UPDATE tblPostcodeStreetView
SET Postcode_ID = tblPostCodeLookup.Postcode_ID
FROM tblPostcodeStreetView
INNER
JOIN tblPostCodeLookup
ON tblPostcodeStreetView.Postcode LIKE tblPostCodeLookup.Postcode + '%'