我在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搜索了几百次,但仍然没有成功。
答案 0 :(得分:1)
我可以看到的第一个问题是您使用UPDATE
将数据插入表中。您应该使用INSERT INTO
。
您需要先在国家/地区表格中插入唯一的国家/地区名称:
INSERT INTO Country (Country)
SELECT DISTINCT Country
FROM CityImport
现在,您需要使用城市名称和国家/地区表格中的ID填充City表格:
INSERT INTO City (CityName, CountryID)
SELECT City, Country.ID
FROM CityImport INNER JOIN Country ON CityImport.Country = Country.Country
修改:
表结构:
的 CityImport 强>
城市 - 文字
国家 - 文本
<强>国家强>
ID - 自动编号
国家 - 文字
主键: ID
<强>城市强>
ID - 自动编号
CityName - 文字
CountryID - 号码
主键:ID
外键 CountryID 参考国家/地区