2013-10-22 67 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