我可以使用一个表来更新另一个表中的信息吗?
问题描述:
我在我的数据库中有一个zipcode
表和一个shelter
表。我希望屏蔽表中的ShelterCity
,ShelterState
和ShelterZip
列参考zipcode
表中的City
,State
和ZipCode
列。我在shelter table
中有ZipCode
列(邮政编码表中的PK)作为外键,但似乎无法弄清楚如何添加其他zipcode
列,以便在输入邮政编码时进行更新进入收容台。我可以使用一个表来更新另一个表中的信息吗?
当我试图添加引用City
,State
,并ZipCode
列ShelterCity
,ShelterState
和ShelterZip
为外键,我得到的,看起来像这样的错误消息:Error Code 1215. Cannot add foreign key constraint.
,我曾经尝试添加这些代码外键如下:
ALTER TABLE shelter ADD FOREIGN KEY (ShelterCity) REFERENCES zipcode(City);
我在做什么错?先谢谢你!
答
对于初学者来说,你的表的结构将是...
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
看看[JOIN](https://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full -join/6188334#6188334)。在执行连接时,每个表中都需要某种id字段作为合并点,但至少应该让您朝着正确的方向移动,并且应该保持数据简洁,而不是将数据复制为两个不同的地方。 – depwl9992
至于更新加入模式请参阅http://stackoverflow.com/q/15209414/1816093 – Drew
您的问题有几个部分它我认为,但它是含糊不清。不知道你是否想要像触发器一样的自动更新/如何更新连接/如何建立FK并避免1215错误。在任何情况下,也许这就是我的1215这个答案:http://stackoverflow.com/a/39332173 – Drew