2013-05-13 119 views
0

我想使用外鍵連接兩個表。外鍵列問題

表1:(斑塊)

PLAQUE_ID PLAQUE_TYPE  facility_id FACILITY PLAQUE_SUB_LOCATION 
2468  Lettering   26   Gorab Building DONOR WALL FRIEND LEVEL 
2469  Lettering   36   abc Hospital MUSIC & ENTERTAINMENT WALL 
2476  Facility Plaque 46   abc Hospital 1ST FL OFFICE ROOM 

表2:設施

FACILITY_ID FACILITY    FACILITY_DESC PLAQUE_ID 
26   Gorab Building       2468 
36   abc Hospital       2469 
46   abc Hospital       2476 

我不想設施表具有相同的行牌匾表。我需要設施欄中的不同名稱。我認爲唯一的方法就是將FACILITY列作爲Plaque表的外鍵,但我很困惑,因爲我們可以將這樣的列作爲外鍵。我只看到ID列作爲外鍵。 FACILITY列中不同值背後的原因是因爲每行都會有關於FACILITY_DESC列中FACILITY的較大描述。

答案將非常感激。

+0

那麼爲什麼不直接查詢'DISTINCT'設施簡單的解釋? – Kermit 2013-05-13 18:49:12

+1

外鍵只能引用目標表的主鍵**(很可能是'Plaque_ID'),或者是唯一索引**的一部分。由於'Plaque'中的'Facility'不是唯一的,所以你不能在其上設置唯一的索引 - 所以你將無法使用外鍵來引用它 – 2013-05-13 18:50:54

+1

Plaques和Facilities之間的關係是什麼?我猜測一個設施可以有任意數量的斑塊,但每個斑塊必須存在於一個且只有一個設施中。它是否正確? – RBarryYoung 2013-05-13 18:56:57

回答

1

您不需要設施表格中的PLAUQUE_ID,因爲您在Plaque表格中有一個facility_id,這足以使Plague表與Facitlity表之間建立連接。只需使用簡單的連接。例如:

SELECT Plaque_ID, Plaque_Type, Facility FROM Plaque INNER JOIN Facility ON Plaque.Facility_ID = Facility.Facility_ID 

我THIK你應該設置設施表的設施列是唯一的,也拆除牌匾表的設施列。請記住,斑塊表應該描述斑塊屬性onlu。 也可以考慮添加一個新的PlaqueType表格,並使用PlaqueType表格的相應外鍵替換Plaque id的Plaque Type列。

下面是如何連接表http://www.w3schools.com/sql/sql_join_inner.asp

+0

我跟着你的指示,但是這給了我不同的行設施和相應的Plaque_id,Plaque_type。但我也希望顯示與他們有相同設施的其他牌匾。我將如何獲得具有相同設施的斑塊。 – user2378934 2013-05-13 19:51:42

+0

牌匾表有80,000行。斑塊只有一個設施,但設施有很多斑塊。那麼如何在Facility表中使用外鍵連接在表格中有不同的行。 – user2378934 2013-05-13 19:54:08

+0

我找到了一個解決方案,它只是在Excel中使用Vlookup在匾表中生成設施ID。具有相同名稱的設施將具有相同的設施ID – user2378934 2013-05-17 23:08:24