2016-09-23 105 views
0

我在我的数据库中有一个zipcode表和一个shelter表。我希望屏蔽表中的ShelterCity,ShelterStateShelterZip列参考zipcode表中的CityStateZipCode列。我在shelter table中有ZipCode列(邮政编码表中的PK)作为外键,但似乎无法弄清楚如何添加其他zipcode列,以便在输入邮政编码时进行更新进入收容台。我可以使用一个表来更新另一个表中的信息吗?

当我试图添加引用CityState,并ZipCodeShelterCityShelterStateShelterZip为外键,我得到的,看起来像这样的错误消息:Error Code 1215. Cannot add foreign key constraint.,我曾经尝试添加这些代码外键如下:

ALTER TABLE shelter ADD FOREIGN KEY (ShelterCity) REFERENCES zipcode(City);

我在做什么错?先谢谢你!

+0

看看[JOIN](https://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full -join/6188334#6188334)。在执行连接时,每个表中都需要某种id字段作为合并点,但至少应该让您朝着正确的方向移动,并且应该保持数据简洁,而不是将数据复制为两个不同的地方。 – depwl9992

+0

至于更新加入模式请参阅http://stackoverflow.com/q/15209414/1816093 – Drew

+0

您的问题有几个部分它我认为,但它是含糊不清。不知道你是否想要像触发器一样的自动更新/如何更新连接/如何建立FK并避免1215错误。在任何情况下,也许这就是我的1215这个答案:http://stackoverflow.com/a/39332173 – Drew

回答

3

对于初学者来说,你的表的结构将是...

zipcode table 
------------- 
City 
State 
Zip 

shelter table 
------------- 
ShelterZip 
Other Fields 

你不需要ShelterCity和ShelterState领域。 ShelterZip会引用Zip。

一个简单的查询是

SELECT City, State, Zip 
FROM shelter 
INNER JOIN zipcode ON shelter.ShelterZip = zipcode.Zip 
WHERE ShelterZip = 12345 

SELECT z.City, z.State, z.Zip 
FROM shelter s 
INNER JOIN zipcode z 
ON s.ShelterZip = z.Zip 
WHERE s.ShelterZip = 12345 

我也建议你在关系数据库设计阅读起来。一个来源是http://www.ntu.edu.sg/home/ehchua/programming/sql/relational_database_design.html

+1

为了便于阅读和调试,请参阅“ON”条款中的表格 – Drew

+0

谢谢德鲁 - 完成。 –

+1

当第一行变长并且有多个连接表(一些名称很长)和常用列名时,表别名(如字母之类的简短表)使其非常明显,没有超长的行 – Drew

相关问题