SQL:从另一个表更新表

时间:2013-02-14 13:59:17

标签: mysql sql sql-update

我有两个表(带有示例数据):

tblZone

[ZoneNo]  [Zone]

-----1------Zone1
-----2------Zone2
-----3------Zone3

tblPointsClient

[PolygonID] [Zone Name]

-----0------------Zone1
-----0------------Zone1
-----0------------Zone1
-----0------------Zone2
-----0------------Zone2
-----0------------Zone2
-----0------------Zone3
-----0------------Zone3
-----0------------Zone3

基本上,使用MySQL,我试图更新tblPointsClient中的PolygonID,因为ZoneNo用于tblZone中的区域(如果有意义的话)。

因此,当我运行此更新时,它应该将PolygonID更改为:

[PolygonID] [Zone Name]

-----1------------Zone1
-----1------------Zone1
-----1------------Zone1
-----2------------Zone2
-----2------------Zone2
-----2------------Zone2
-----3------------Zone3
-----3------------Zone3
-----3------------Zone3

我尝试了以下内容:

UPDATE tblPointsClient 
SET tblPointsClient.PolygonID = (
   SELECT ZoneNo FROM tblZones WHERE tblPointsClient.ZoneNo = tblZones.Zone
                                )

但这使得所有PolygonID的0

如果有人可以提供帮助,那将非常感激! :)

2 个答案:

答案 0 :(得分:3)

UPDATE  tblPointsClient a
        INNER JOIN tblZone b
            ON a.`Zone Name` = b.Zone
SET     a.PolygonID = b.ZoneNo

要获得更快的效果,请在表INDEX上的Zone Name列和tblPointsClient上的Zone上添加tblZone

更新1

答案 1 :(得分:2)

您可以使用子查询来实现此目标:

UPDATE tblPointsClient 
SET PolygonID = (SELECT TOP 1 ZoneNo FROM tblZone WHERE Zone = [Zone Name])
WHERE PolygonID = 0

我创建了仅使用PolygonID = 0

更新行的代码