2014-10-28 67 views
2

使用MySQL我試圖使用已經上傳到數據庫的數據建立一對多的關係。舉例來說,讓我說我有一個表中的名稱列表,我想將它們連接到他們已經去過的地方列表。很明顯,1人可以去很多不同的地方,但我有一個問題得到這個設置。設置N-M關係的問題

 -----Name-----------ID--------- 
      John Smith  1 
      Joe Random  2 
      Seth Guy  3 
     ------------------------------ 

我還有一個表是這樣的:

 -------city---------ID--------- 
      New York  1 
      Chicago   2 
      Orlando   3 
      LA    4 
     ------------------------------- 

我正在尋找這樣的事情:

 --------Name--------City---------- 
      John Smith Chicago 
      John Smith Orlando 
      John Smith New York 
      Seth Guy  Chicago 
      Joe Random LA 
     ------------------------------------ 

我明明知道約翰·史密斯一直都3個位置,因爲我上傳的原始文件告訴我,但我希望數據庫能夠建立連接並相應地放置它們。

+4

你的關係是n-m,而不是1-n。一個人可以去很多地方。一個地方可以被許多人訪問。 – 2014-10-28 16:17:26

+2

你需要另外一個'visited',其中'person_id'和'city_id'作爲列。這將允許你有多對多的關係。 – 2014-10-28 16:19:39

回答

2

正如評論所述,這是一個N-M關係,而不是1-N關係。你需要一個額外的「映射」表來記錄訪問:

CREATE TABLE visits (
    person_id INT, 
    city_id INT, 
    CONSTRAINT visits_pk PRIMARY KEY (person_id, city_id) 
); 

然後,您可以查詢所有與一對夫婦的訪問連接:

SELECT person.name, city.name 
FROM person 
JOIN visits ON person.id = visits.person_id 
JOIN city ON visits.city_id = city.id 
+0

哦,對不起,我的錯誤,我會適當地編輯問題。此外,當我實現你的答案時,它不顯示任何東西,只是一張空白表。 – Jcmoney1010 2014-10-28 16:47:55

1

引入的關係成立的新表。

你的模式將是這個樣子:

create table person (id, name) 
create table city (id, name) 
create table person_to_city (people_id, city_id) 

創建於people_id和city_id一個外鍵約束。