2017-03-03 88 views
0

我在更新Access中的查询时遇到问题。我有3个表格:用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,它工作正常。问题在于它忽略了不同国家的同名城市。

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

我在几个小时内玩过不同的查询,搜索了几百个小时,但仍然没有成功。

+0

http://stackoverflow.com/questions/15209414/how-to-do-3-table-join-in-update-query?rq=1 – Dave

+0

@戴夫,它没有解决我确切的问题。我知道如何连接表,但我无法工作的是将它们连接到两个嵌套连接的不同表中的字段。 – brainac

回答

1

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

与此表开始:
enter image description here

你需要独特的国名第一个插入到该国表:

INSERT INTO Country (Country) 
SELECT DISTINCT Country 
FROM CityImport 

这会给你这个表:
enter image description here

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

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 参考国家

+0

感谢您的建议。至于'CountryName',这只是一个错字,但很好。 我知道我可以在这种情况下使用插入,但我想用这种方法用于其他表,并且不仅能够添加新记录,还能够更新现有的记录。 – brainac

+0

以为我有一个高级时刻 - 再次看,只能看到'CityName',所以删除我的编辑指出,但现在可以再次看到它。我真的需要退休,度过我的日子抚育我的花园。 :) –

+0

我很欣赏这种努力:)我可能可以通过从第一次连接创建额外的临时表来解决这个问题,但我希望能够通过** right **的方式来实现。一般来说,在数据库方面很难找到好的做法。周围有很多不同的方法。 – brainac