【问题标题】:Calculated Field from Linked Table链接表中的计算字段
【发布时间】:2015-03-05 06:47:14
【问题描述】:

我使用的是 MS Access 2013。我的数据库有四个相关表:

Table A) Numerical_Key_A, {Other Data Items}
Table B) Numerical_Key_B, "Adjustment Value", {Other Data Items}
Table C) Numerical_Key_C, {Other Data Items}
Table D) {Other Data Items}, Link-to-B, Link-to-A, Link-to-C

然而,它的工作方式是进入表 D 记录的 Link-to-C 始终与 Numerical_Key_A 完全“调整值”。因此,我希望在输入 Link-to-A 和 Link-to-B 时自动计算 Link-to-C。

据我所知,这需要表 D 有一个计算字段,该字段从链接的表 B 中获取其数据,而 Access 不允许这样做。还有另一种方法可以做到这一点吗?如果可能的话,我宁愿不使用 VBA,但如果这是唯一的方法,我只需要学习如何去做。 (我知道 Excel 的 VBA,但之前从未在 Access 中使用过它)。

【问题讨论】:

  • 我知道如何创建查询,但是如何使用查询来填充字段?还是我误解了我应该如何构建它?
  • 是的,您可以创建返回计算数据的查询,甚至更好的是,您可以使用查询结果更新表字段。您要计算哪个字段?基于什么条件?
  • 在表 D 中,我希望一个字段(链接到表 C 的主键)填充一个等于当前记录的主键 A 的数字,添加到相关的“调整值”来自表 B。所以,我知道如何创建整个数据库的通用查询。如何在相关表中仅查询此记录的值?
  • 我正在对 SQL 进行更多研究,因为我只知道非常基本的命令。一些谷歌搜索使我走上了两条看起来行不通的道路:SELECT INTO 行不通,因为这会创建一个新表,而 INSERT INTO 行不通,因为这会创建一个新记录。我不需要新记录,我需要更新现有记录的字段。什么命令会这样做?

标签: sql ms-access relational-database ms-access-2003


【解决方案1】:

如果我理解你,你需要做的就是在表之间创建连接,例如:

SELECT D.Field1, D.Field2, B.[Adjustment Value]
FROM Table_D AS D INNER JOIN Table_B AS B ON D.Link-To-B = B.Numerical_Key_B

更多信息请见:
Join tables and queries
How to: Perform Joins Using Access SQL

[编辑]

在表 D 中,有一个字段,我在上面的代码段中将其标记为“Link-to-C”。此字段应填充 Link-to-A 加上 TableB.AdjustmentValue 的值

SELECT D.Field1, D.Link-To-C + D.Link-To-A + B.[Adjustment Value] AS CalculatedField
FROM (Table_D AS D INNER JOIN Table_B AS B ON D.Link-To-B = B.Numerical_Key_B) 
INNER JOIN Table_C AS C ON C.Numerical_Key_C = D.Link-To-C) 
INNER JOIN Table_A AS A ON A.Numerical_Key_A = D.Link-To-A

注意:我没有机会测试它。这只是一个想法。

最后我要警告你:Access likes () /brackets/ while multiple joins are used.

[EDIT2]

根据讨论,以下查询应返回计算字段:

SELECT C.MetaLevel, R.LevelAdjustment, C.MetaLevel+ R.LevelAdjustment AS NominalLevel
FROM tblRank AS R INNER JOIN tblCreatures AS C ON R.ID = C.Rank;

如果您想更新 tblCreatures 中的 NominalLevel,请使用如下查询:

UPDATE tblCreatures AS C
INNER JOIN tblRank AS R ON R.ID = C.Rank
SET C.NominalLevel = (C.MetaLevel+ R.LevelAdjustment);

NominalLevel 已更新。你也可以选择它...

SELECT C.MetaLevel, R.LevelAdjustment, C.NominalLevel
FROM tblRank AS R INNER JOIN tblCreatures AS C ON R.ID = C.Rank;

干杯,
马切耶

【讨论】:

  • 因此,查询有效,因为它生成了三个字段的漂亮列表。如何在计算字段中使用它,或者以其他方式使用该查询中的数据实际填充表 D 中的新字段?
  • 你要计算什么字段?基于什么标准?为了能够回答,我需要知道您要使用的逻辑。
  • 在表 D 中,有一个字段,我在上面的代码段中将其标记为“Link-to-C”。此字段应填充 Link-to-A 加上 TableB.AdjustmentValue 的值
  • 没有。这行不通。我现在正在阅读 Inner Joins,这似乎应该建立一个临时关系?我已经在数据库中建立了一个关系,其中 Link-to-A = TableA.PrimaryKey 等等,所以我不确定所有的 INNER JOINS 是什么,而且这里的命令似乎都没有做任何事情据我所知,填充我的字段 D.Link-to-C。
  • @RichardWinters,我没有看到您的数据库结构,所以...请发布您想要加入的示例(虚拟)数据并发布预期的输出,然后我将能够帮助您编写正确的查询.好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2015-05-21
相关资源
最近更新 更多