2016-09-23 85 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

相關問題