【问题标题】:How to update MySQL table based on 3 other tables如何根据其他 3 个表更新 MySQL 表
【发布时间】: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 例程,当它工作时;)

标签: mysql sql


【解决方案1】:

经过必须测试,我设法让以下更新查询正常工作

UPDATE City
INNER JOIN Hotel ON City.CityId = Hotel.CityId
INNER JOIN HotelRegion ON Hotel.HotelId = HotelRegion.HotelId
SET City.RegionId = HotelRegion.RegionId
WHERE City.CityId = 1223
AND Hotel.CityId = 1223

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多