【问题标题】:Access Table Configuration访问表配置
【发布时间】:2013-10-22 15:57:05
【问题描述】:

我对访问还很陌生,我需要对设置两个表的方式有所了解。我从事跟踪设备采购的业务。我有一张表,其中包含主要单位、数量、品牌/型号信息以及其他一些购买细节。我们有与每个主要单元相关联的唯一编号。因此,假设我们要订购一台电视,该号码一直是 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 

这可能是一个简单的修复,我只是在放屁,或者我应该把配件放在主桌子上,我不确定。任何建议/见解将不胜感激。

【问题讨论】:

  • 您可以编辑您的帖子以将字段名称添加到示例数据中吗?我确定这只是一个加入问题,但如果不知道字段名称,我无法判断你加入的错误。
  • 我按要求将字段名称添加到示例数据中。
  • 根据我对 A/V 领域的了解,我知道并非每个配件都是每台电视独有的。此外,每台电视都有不止一个配件,因此您实际上有一个多对多的关系在这里工作。请编辑您的帖子并添加您尝试过的 SQL。我仍然无法弄清楚您是如何获得第一个示例数据集的,因此我无法帮助您获得所需的数据集。

标签: ms-access database-table


【解决方案1】:

如上所述,您实际上在这里处理的是多对多关系。因此,您将需要一个“人行横道”表。设置方法如下:

1) 电视表将具有 TVID(主键,唯一)、电视名称、数量、制造商等...

2) 附件表将有附件ID(主键,唯一)、附件名称、数量、制造商等...

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。

从电视桌到人行横道桌的一对多。从 Accessory 表到 Crosswalk 表的一对多。

嘘!那应该可以解决您的问题。如果您在此之后无法弄清楚如何让您的查询正常工作,请告诉我,我会看看能否指导您完成剩下的工作。

【讨论】:

    【解决方案2】:

    如果主表中的每个单元都有很多配件,则需要在两者之间建立多对一关系。

    在附属表中添加外键列,设置为所属主表中项目的主键。

    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。我们称它们为 main(id)。您将拥有与主键和外键值相关联的附件行。我们称它们为附件(id,parent_id)。

    INSERT row into main 给你 main(1)。

    在与 main 中的第一行关联的附件中插入三行,为您提供附件(1、1)、附件(2、1)、附件(3、1)。

    使用 JOIN 将它们组合在一起:

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

    我认为您在使用 Access 时会遇到问题,因为它是为不太了解关系数据库或 SQL 的非技术人员设计的。如果您使用 UI 创建表,则必须正确添加关联外键,否则它将不起作用。

    【讨论】:

    • 我试过这样做,但它一直说不确定。那是因为两个表都有自动编号作为主键吗?
    • 不,这表明您应该在两者上都有主键,但是您没有在附件上创建外键列并使用主主键值填充它。我在示例中将该外键列称为 parent_id。配件上还有一个 id 主键。
    • 我在两个表中都有主 ID 号,但由于主 ID 可能多次出现在其中,因此我无法将其指定为主键。
    • 主id不是附件表中的主键,仅在main中。您不太了解 SQL 或表。
    • 我提前为提出愚蠢的问题道歉,但是如果有重复,主 id 怎么能成为主键呢?电视。 (12345) 将被多次订购,因此它们将在主表中重复。 Access 不允许我创建一对多关系。
    猜你喜欢
    • 2020-05-23
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多