4

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

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,我试图通过 tblZone 中区域的 ZoneNo 来更新 tblPointsClient 中的 PolygonID(如果有意义的话)。

因此,当我运行此更新时,它应该将 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
                                )

但这使得所有的 PolygonID0

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

4

2 回答 2

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

为了获得更快的性能,请在 table和on table上添加一个INDEXon 列。Zone NametblPointsClientZonetblZone

更新 1

于 2013-02-14T14:00:45.967 回答
2

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

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

我创建了只更新行的代码PolygonID = 0

于 2013-02-14T14:07:27.940 回答