【发布时间】:2013-08-24 18:16:22
【问题描述】:
我有以下四个 MySQL 表
Region
RegionId
City
CityId
RegionId
Hotel
HotelId
CityId
HotelRegion
HotelId
RegionId
我正在努力编写一条 UPDATE 语句来根据 HotelRegion 表中的数据更新 City 表的 RegionId 字段。
基本上如何使用正确的 RegionId 更新 City 表,其中 HotelRegion 表中的 HotelId 与 City 表的 CityId 匹配。
这是我目前的 UPDATE 语句
UPDATE City c
SET c.RegionId =
(SELECT DISTINCT(HotelRegion.RegionId) FROM HotelRegion
INNER JOIN Hotel ON Hotel.HotelID = HotelRegion.HotelID
INNER JOIN City ON City.CityId = Hotel.CityId
WHERE City.CityId = 1233)
WHERE c.CityId = 1233
我得到的错误信息是你不能在 FROM 子句中指定目标表 'c' 进行更新。 如果您需要更多信息来帮助回答我的问题,请告诉我
【问题讨论】:
-
希望能根据我的问题给出一些建议,而不是模糊的回答。
-
你的表结构让我很困惑。如果 Hotel 表通过 City ID 链接到 City 表,并且 City ID 表有到 region 的链接,那么 HOTELREGION 表为什么存在?这不会重复 HOTEL 表中的信息吗?
-
因为此时 RegionId 为 NULL。所以我需要从我拥有的 HotelRegion 获取数据,例如我知道酒店所在的地区和城市。但系统不知道城市所在的地区。
-
我假设 HotelRegion.RegionID 和 City.RegionID 都是对 Region.RegionID 的引用。
-
我希望是这样。基本上,这些数据来自外部来源,在处理它时,我将运行这个 UPDATE 例程,当它工作时;)