使用3个表更新连接查询

时间:2017-03-03 09:54:39

标签: sql ms-access join

我在Access中更新查询时遇到问题。我有3张桌子:

City
ID | CityName | CountryID|

Country
ID | CountryName

CityImport
City | Country

我不确定这是不是正确的设计,但它现在不太重要了。

我想用Excel数据更新我的数据库。我决定创建CityImport表以使过程更清晰。我把城市信息放在这个表中,我希望用它填充City表。当我运行UPDATE (CityImport INNER JOIN Country ON CityImport.Country = Country.CountryName) LEFT JOIN City ON City.CityName = CityImport.City AND City.CountryID = Country.ID SET City.CityName = CityImport.City, City.CountryID = Country.ID WHERE CityImport.City IS NOT NULL之类的查询时,出现JOIN expression not supported错误。

我认为这是我的语法问题,但是如果我从JOIN中删除一个条件,并将其保留为UPDATE (CityImport INNER JOIN Country ON CityImport.Country = Country.CountryName) LEFT JOIN City ON City.CityName = CityImport.City SET City.CityName = CityImport.City, City.CountryID = Country.ID WHERE CityImport.City IS NOT NULL,则它可以正常工作。问题是它忽略了不同国家的同名城市。

是否有可能以某种方式使这种连接正常工作?或者根据定义是不正确的?它需要将一个表与来自不同表的两个列的另一个连接结果连接起来。在这种情况下,我可能会以某种方式解决它,但是我想对更多更复杂的表使用相同的方法。

我在这个查询中玩了几个小时,用Google搜索了几百次,但仍然没有成功。

1 个答案:

答案 0 :(得分:1)

我可以看到的第一个问题是您使用UPDATE将数据插入表中。您应该使用INSERT INTO

从这张表开始:
enter image description here

您需要先在国家/地区表格中插入唯一的国家/地区名称:

INSERT INTO Country (Country)
SELECT DISTINCT Country
FROM CityImport

这将为您提供此表:
enter image description here

现在,您需要使用城市名称和国家/地区表格中的ID填充City表格:

INSERT INTO City (CityName, CountryID)
SELECT City, Country.ID
FROM  CityImport INNER JOIN Country ON CityImport.Country = Country.Country

返回此表:
enter image description here

修改:

表结构:
CityImport
城市 - 文字
国家 - 文本

<强>国家
ID - 自动编号
国家 - 文字
主键: ID

<强>城市
ID - 自动编号
CityName - 文字
CountryID - 号码
主键:ID
外键 CountryID 参考国家/地区