2013-02-14 4 views
4

J'ai deux tables (avec des données de l'échantillon):SQL: Mettre à jour une table d'une autre table

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 

En fait, en utilisant MySQL, J'essaye de mettre à jour le PolygonID dans tblPointsClient par ce que le ZoneNo est pour la Zone dans tblZone (si cela a du sens).

Alors, quand je lance cette mise à jour devrait changer les années PolygonID à:

[PolygonID] [Zone Name] 

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

J'ai essayé ce qui suit:

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

mais cela fait tout 0

de la PolygonID Si quelqu'un pourrait aider, ce serait très apprécié! :)

Répondre

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

pour une performance plus rapide, ajoutez une INDEX sur la colonne Zone Name sur la table tblPointsClient et Zone sur la table tblZone.

MISE À JOUR 1

+0

Légende, merci :) – nsilva

+0

vous êtes les bienvenus ': D' heureux que cela a fonctionné. –

2

Vous pouvez utiliser sous_requête pour atteindre cet objectif:

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

J'ai code créé pour mettre à jour uniquement les lignes avec PolygonID = 0

Questions connexes