0

我在 Access 中设置了几个表,如下所示(请原谅稍微多余的示例内容):

Table 1:
- ID
- FirstName
- SecondName

Table 2:
- ID
- Details
- PersonID -> Table 1[ID]

Table 3:
- ID
- Group
- PersonDetails -> Table 2[ID]

表 1 是包含记录且不检索其他信息的基表。例如,它可以存储某人的名字和第二名,以及自动编号 ID。

表 2 包含的记录,除其他外,还包含一个链接到表 1 的字段并存储其中保存的一条记录的 ID。通过查找向导,我可以选择使用表 1 中的所有字段,将表 1 记录的 ID 存储在表 2 字段中,并在表单的组合框中显示名字和第二个名称,以便更直观地选择记录。

在表 3 中,我需要存储表 2 中的一条记录的 ID。但是,我还想在表单组合框中再次显示存储 ID 的相关记录(在表 1 中)中的名字和名字在表 2 中。例如,我不能选择使用表 2 中的 PersonDetails 字段,因为这只是将 ID 号放入组合框中 - 我需要执行以下操作:

Table 2[ID]->[FirstName]

这可能与 Access 中的查找向导有关,还是我必须查看查询或 VBA?

谢谢。

4

1 回答 1

0

您对组合的查询应如下所示:

SELECT cp.ID, cp.ReferenceName, c.Company, p.FeePerHour 
FROM (ClientProfile AS cp LEFT JOIN Clients AS c ON cp.ClientID = c.ID)
LEFT JOIN Pricing AS p ON cp.PricePlanID = p.ID;

您的查询的主要问题是您缺少多个连接时所需的括号。如果您有另一个联接,则需要第二组括号。

我冒昧地使用了表别名。它使 SQL 简洁且更具可读性。

如果此查询仍然不起作用,可能是因为您尝试将“子表”连接到“主表”而不使用外键字段作为连接字段。如果这是我的数据库,SQL 将如下所示:

SELECT cp.ClientProfileID, cp.ReferenceName, c.Company, p.FeePerHour 
FROM (ClientProfile AS cp LEFT JOIN Clients as C ON cp.ClientID = c.ClientID)
LEFT JOIN Pricing AS p ON cp.ClientProfileID = p.ClientProfileID;

就个人而言,我基本上从不只使用普通 ID 作为字段名称。在创建外键时,我通常使用与原始表相同的字段名称。也有例外,尤其是在您需要多次链接回同一个表的情况下。考虑这样一种情况,您正在跟踪房地产,并且在同一个 People 表中有一个买家和一个卖家,它们都是实体(但彼此不同)。然后,您需要将它们命名为 BuyerID 和 SellerID,但最终它们会链接回 Person 表中的 PersonID。

所以这是我想要的桌子设计。请注意,我将 Group 更改为 PriceGroup。编程时要注意保留字,不仅在 SQL 中,而且在任何语言中。如果您在某个时候将您的字段命名为 Group,您将尝试“Group on Group”,这听起来和看起来都很糟糕,如果没有其他的话。

Client:
- ClientID
- FirstName
- SecondName

ClientProfile:
- ClientProfileID
- Details
- ClientID (Foreign Key to Client)

Pricing:
- PricingID
- PriceGroup
- ClientProfileID (Foreign Key to ClientProfile)
于 2013-08-23T13:37:37.067 回答