2

我有以下完全符合预期的 SQL:

UPDATE Zones 
SET Zones.Zone = (SELECT Zone FROM Zones_New WHERE Zones_New.ZONENO = ZONES.ZONENO)

但是,这会更新表Zones并将字段设置为表Zone中的Zone名称,Zones_New并通过ZoneNo.

同时我想做完全相同的事情,但也将Name字段设置Zone为 table 中的名称Zones_New

所以基本上我正在设置Zone&是表中Name的值ZoneZones_New

我只是无法弄清楚SQL,所以我会很感激任何帮助:)

4

4 回答 4

3
UPDATE Zones
SET Zones.Zone = Zones_New.Zone,
    Zones.Name = Zones_New.Name
FROM Zones
INNER JOIN Zones_New ON Zones.ZONENO = Zones_New.ZONENO

请注意,如果您想故意为不匹配的行设置空值,则可以改用 LEFT JOIN。

于 2013-01-04T09:15:36.820 回答
0
UPDATE Zones
SET Zones.Zone = Zones_New.Zone,
    Zones.Name = Zones_New.Name
FROM Zones, Zones_New
WHERE Zones.ZONENO = Zones_New.ZONENO
于 2013-01-04T09:17:33.327 回答
0

您可以像这样运行子查询两次:

UPDATE Zones 
 SET Zones.Zone = (SELECT Zone 
                   FROM Zones_New 
                   WHERE Zones_New.ZONENO = ZONES.ZONENO),
     Zones.Name = (SELECT Zone 
                   FROM Zones_New 
                   WHERE Zones_New.ZONENO = ZONES.ZONENO)

或者你可以加入

UPDATE Zones 
 SET Zones.Zone = Zones_New.Zone
     Zones.Name = Zones_New.Zone
FROM Zones
  LEFT OUTER JOIN Zones_New 
    ON Zones_New.ZONENO = ZONES.ZONENO

如果在表null中未找到相应的记录,则这两个查询都将获取数据。Zones_New

于 2013-01-04T09:14:21.473 回答
0

最简单的就是...

UPDATE Zones 
SET Zones.Zone = (SELECT Zone FROM Zones_New WHERE Zones_New.ZONENO = ZONES.ZONENO),
    Zones.Name = (SELECT Zone FROM Zones_New WHERE Zones_New.ZONENO = ZONES.ZONENO)

更复杂的可能是......

UPDATE Z
SET Zones.Zone = ZN.Zone
FROM Zones Z
  LEFT JOIN Zones_New ZN
    ON Z.ZONENO = ZN.ZONENO
于 2013-01-04T09:14:30.227 回答