2013-10-22 63 views
0

我是相當新的訪問,我需要一些見解,我設置兩個表的方式。我從事設備採購跟蹤業務。我有一張桌子,包含主要單位,數量,品牌/型號信息以及其他一些購買詳情。我們有與每個主要單位相關的唯一號碼。所以說我們想要訂購一個T.V.這個數字是,並且總是12345.好吧,現在我們需要單獨跟蹤配件,我認爲最好有一個單獨的配件表。我遇到的問題是,因爲可能有不同數量的配件和不同的數量,所以我的數字就會丟失。當我運行查詢或報告時,它顯示主單元的多個記錄。訪問表配置

我希望查詢分別列出這些行。

ID Desc Qty Type 
12345 TV  3 Main Unit 
12345 Cable 3 Accessory 
12345 Mount 2 Accessory 

相反,它列出了第一行兩次,所以看起來總共有6個單位。

12345 TV 3 Accessory Cable 3 
12345 TV 3 Accessory Mount 2 

它可能是一個簡單的修復,我只是有一個腦屁,或者我應該把配件放在主表,我不知道。任何建議/見解將不勝感激。

+0

你可以編輯你的文章,將字段名稱添加到樣本數據?我確信這僅僅是一個連接問題,但我不知道你是否加入錯誤而不知道字段名稱。 –

+0

我根據請求將字段名稱添加到示例數據。 – user2891566

+0

考慮到我對A/V領域的知識,我知道並不是每一個配件都是每個電視獨有的。此外,每臺電視都配有多個附件,因此您實際上可以在此處使用多對多關係。請編輯您的文章並添加您嘗試過的內容的SQL。我仍然無法弄清楚你是如何得到你的第一個樣本數據集的,所以我無法幫你找到你想要的數據集。 –

回答

0

正如我上面所說的,你實際上正在處理一個多對多的關係。因此,你將需要一個「人行橫道」表。這裏是你將如何設置它:

1)電視表將有TVID(主鍵,唯一),TV名稱,數量,生產廠家等..

2)附件表將有AccessoryID(主密鑰,唯一),配件名稱,數量,製造商等...

3)Crosswalk表將具有無主鍵的TVID和AccessoryID。您可以在此處輸入每個TVID和AccessoryID組合。 實施例:

TVID   AccessoryID 
12345   666 
12345   777 
12345   888 
55555   777 
55555   888 

說12345是TV1和55555是TV 2。現在您知道TV1可以使用附件號碼666,777和888,而TV2可以使用附件號碼777和888.

一對多從電視表到人行橫道表。一對多從配件表到Crosswalk表。

Boo-YAH!這應該可以解決你的問題。如果你無法弄清楚如何讓你的疑問繼續工作,讓我知道,我會看看我是否可以指導你的其餘部分。

0

如果主表中的每個單元都有很多附件,那麼您需要在兩者之間建立多對一的關係。

將外鍵列添加到附件表中,並將其設置爲它所屬的主表中項目的主鍵。

create table main (
    id identity, 
    primary key(id) 
); 

create table accessory (
    id identity, 
    parent_id int, 
    primary key(id), 
    foreign key(parent_id) references main 
); 

所以現在你在main中創建行,每個行都有自己的主鍵id。我們稱他們爲主(id)。您將具有與主鍵值和外鍵值相關聯的連接行。我們稱它們爲配件(id,parent_id)。插入主行的INSERT行給你主(1)。

將三行插入附件中與第一行關聯的附件(1,1),附件(2,1),附件(3,1)。

把他們一起使用JOIN:

select * 
from accessory 
join main 
on accessory.parent_id = main.id 

我想是因爲它的設計用於非技術的人誰不知道關係數據庫或SQL以及你將有一個問題與Access。如果您使用UI創建表格,則必須正確添加關聯外鍵,否則將無法工作。

+0

我試過這樣做,但它一直說不確定。那是因爲這兩個表都有自動編號作爲主鍵? – user2891566

+0

不,它表明你有兩個主鍵,就像你應該的那樣,但是你沒有在附件上創建外鍵列,並用主鍵值填充它。我在例子中調用了外鍵列parent_id。配件上還有一個ID主鍵。 – duffymo

+0

我在這兩個表中都有主要的id號,但是由於主ID有多次可能會在那裏多次出現,因此不會讓我將它分配爲主鍵。 – user2891566