【问题标题】:How to design tables to allow for multi-field query on one row如何设计表以允许在一行上进行多字段查询
【发布时间】:2020-04-05 05:37:42
【问题描述】:

我对数据库设计非常陌生,并且正在使用 MS Access 来尝试完成我的任务。我正在尝试创建一个允许查询两个项目的名称和描述的数据库设计 在单行信息上。这是问题所在:某些项目被转换为其他特定项目 - 任何项目都可以对其执行多次转换,并且所有转换都将涉及两个(许多)项目。 从这个意义上说,我们有一个多对多的关系,需要使用一个中间表。我的 表的结构必须允许我在一行中查询项目 ID 和名称 其中涉及转换的项目。

我目前的表格布局如下:

Items 
+--------+----------+------------------+--+
| ItemID*| ItemName | ItemDescription  |  |
+--------+----------+------------------+--+
|      1 | DESK     | WOOD, 4 LEG      |  |
|      2 | SHELF    | WOOD, SOLID BASE |  |
|      3 | TABLE    | WOOD, 4 LEG      |  |
+--------+----------+------------------+--+


ItemConversions
+------------------+--------------+
| ConversionID(CK) | Item1_ID(CK) |
+------------------+--------------+
|                1 |            2 |
|                2 |            2 |
|                3 |            1 |
+------------------+--------------+

Conversions
+---------------+----------+----------+
| ConversionID* | Item1_ID | Item2_ID |
+---------------+----------+----------+
|             1 |        2 |        1 |
|             2 |        2 |        3 |
|             3 |        1 |        3 |
+---------------+----------+----------+

我想要的是可能实现我上面描述的那种查询,虽然我不认为 我当前的布局将为此工作,因为表仅在 Item1_ID 上加入。任何建议 将不胜感激,希望我的表格不是太具体,这很容易理解。

示例查询输出可能如下所示:

+--------------+----------+----------+----------+----------+
| ConversionID | Item1_ID | ItemName | Item2_ID | ItemName |
+--------------+----------+----------+----------+----------+
|            1 |        2 | SHELF    |        1 | DESK     |
+--------------+----------+----------+----------+----------+

【问题讨论】:

  • 所以也许您需要将 ItemConversions 与 Conversions 结合起来,并将 Items 与 Item1_ID 和 Item2_ID 结合起来?这意味着将 Items 拉入查询两次,第二次将有一个别名,如 Items_1。访问查询设计器将分配该别名。

标签: sql ms-access database-design


【解决方案1】:

在 June7 的建议的帮助下,我得到了我想要的结果 - 我不知道你可以添加表格 在查询设计页面中多次(非常有用!)。至于表格,我编辑了布局,所以我只有 项目和转换(我删除了 ItemConversions)。使用 AS sql 命令,我能够编写一个查询 我想从表格中获得的数据。表格和查询布局如下所示:

Items 
+--------+----------+------------------+--+
| ItemID*| ItemName | ItemDescription  |  |
+--------+----------+------------------+--+
|      1 | DESK     | WOOD, 4 LEG      |  |
|      2 | SHELF    | WOOD, SOLID BASE |  |
|      3 | TABLE    | WOOD, 4 LEG      |  |
+--------+----------+------------------+--+

Conversions
+---------------+----------+----------+
| ConversionID* | Item1_ID | Item2_ID |
+---------------+----------+----------+
|             1 |        2 |        1 |
|             2 |        2 |        3 |
|             3 |        3 |        1 |
+---------------+----------+----------+


Query:

SELECT
   Conversions.ConversionID,
   Conversions.Item1_ID,
   Conversions.Item2_ID,
   Items.ItemName,
   Items_1.ItemName,
FROM
   (
      Conversions 
      INNER JOIN
         Items 
         ON Conversions.Item1_ID = Items.ItemID
   )
   INNER JOIN
      Items AS Items_1 
      ON Conversions.Item2_ID = Items_1.ItemID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2016-03-04
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2021-06-22
    相关资源
    最近更新 更多