首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接表的多个实例的MS访问

连接表的多个实例的MS访问
EN

Stack Overflow用户
提问于 2018-07-20 15:06:51
回答 3查看 101关注 0票数 0

我正试图就我为一家矿业公司收集的一组数据做一份报告。

每天,一个采矿项目将从他们的矿山和工厂发送数据。这些数据由3组读数组成:它们产生了什么,当天计划了什么,以及每月的目标是什么。一个月的目标不变,这个月的目标通常是不变的,但在特殊情况下会发生变化。

因此,我制作了一个铣削和采矿阅读表,并将3个实例合并到挖掘/铣削报告中。

下面是我的数据库的关系图:

现在我想计算一下每次阅读所得到的百分比。因此,我需要采取的生产读数,并除以他们的同等的每日目标。

问题是,我在SQL和Access方面几乎是个新手

我仍在试图加入三个阅读表,以挖掘/碾磨一个单一的报告。我试过这个:

代码语言:javascript
复制
SELECT Rapport_quotidien.ID_rapport,
       Données_mine.*,
       Données_mine_1.*,
       Données_mine_2.*,
       Données_moulin.*,
       Données_moulin_1.*,
       Données_moulin_2.*
FROM Données_mine AS Données_mine_1,
     Données_mine AS Données_mine_2,
     Données_moulin AS Données_moulin_1,
     Données_moulin AS Données_moulin_2, (Données_moulin
INNER JOIN Rapport_moulin ON (Données_moulin.ID_data_moulin = Rapport_moulin.Cible_quotidienne)
      AND (Données_moulin.ID_data_moulin = Rapport_moulin.Usinage)
      AND (Données_moulin.ID_data_moulin = Rapport_moulin.Cible_mensuelle))
INNER JOIN ((Données_mine
INNER JOIN Rapport_minier 
        ON (Données_mine.ID_data_mine = Rapport_minier.Production)
       AND (Données_mine.ID_data_mine = Rapport_minier.cible_quotidienne)
       AND (Données_mine.ID_data_mine = Rapport_minier.cible_mensuelle))
INNER JOIN Rapport_quotidien ON Rapport_minier.ID_minier = Rapport_quotidien.Minier) 
        ON Rapport_moulin.ID_moulin = Rapport_quotidien.Moulin
WHERE (((Rapport_quotidien.ID_rapport)=[ID du rapport:]));

它给我纠正字段,但没有数据,即使我有数据测试。下面是设计模式中的样子:设计

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-23 17:57:16

最后,我所要做的就是重新定义GUI中的连接关系。我把Rapport_minier.cible_quotidienne链接到Données_mine_1,Rapport_minier.cible_mensuelle链接到Données_mine_2,Rapport_moulin.cible_quotidienne链接到Données_moulin_1,Rapport_moulin.cible_mensuelle链接到Données_moulin_2。

GUI中的解决查询

这就造成了一个可怕的查询混乱:

代码语言:javascript
复制
SELECT Rapport_quotidien.ID_rapport, Données_mine.*, Données_mine_1.*, Données_mine_2.*, Données_moulin.*, Données_moulin_1.*, Données_moulin_2.*
FROM Données_moulin AS Données_moulin_2 
INNER JOIN (Données_moulin AS Données_moulin_1 
INNER JOIN (Données_moulin 
INNER JOIN (Rapport_moulin 
INNER JOIN ((Données_mine AS Données_mine_2 
INNER JOIN (Données_mine AS Données_mine_1 
INNER JOIN (Données_mine 
INNER JOIN Rapport_minier ON Données_mine.ID_data_mine = Rapport_minier.Production) 
ON Données_mine_1.ID_data_mine = Rapport_minier.cible_quotidienne) 
ON Données_mine_2.ID_data_mine = Rapport_minier.cible_mensuelle) 
INNER JOIN Rapport_quotidien ON Rapport_minier.ID_minier = Rapport_quotidien.Minier) 
ON Rapport_moulin.ID_moulin = Rapport_quotidien.Moulin) 
ON Données_moulin.ID_data_moulin = Rapport_moulin.Usinage) 
ON Données_moulin_1.ID_data_moulin = Rapport_moulin.Cible_quotidienne) 
ON Données_moulin_2.ID_data_moulin = Rapport_moulin.Cible_mensuelle
WHERE (((Rapport_quotidien.ID_rapport)=[Rapport à chercher]));
票数 0
EN

Stack Overflow用户

发布于 2018-07-20 15:22:19

您必须使用以下格式:

代码语言:javascript
复制
FROM ((MyTable MyTable1
INNER JOIN MyTable MyTable2 ON [links between MyTable1 and MyTable2])
INNER JOIN MyTable MyTable3 ON [links between MyTable1 or MyTable2 and MyTable3])
INNER JOIN OtherTable ON [links between MyTable1 or MyTable2 or MyTable3 and OtherTable]

或者这个

代码语言:javascript
复制
FROM (((RootTable
INNER JOIN SubTable SubTable1 ON [links between RootTable and SubTable1])
INNER JOIN SubTable SubTable2 ON [links between RootTable and SubTable2])
INNER JOIN SubTable SubTable3 ON [links between RootTable and SubTable3])
INNER JOIN OtherTable ON [links between RootTable and OtherTable]

您可能需要使用OUTER联接而不是INNER ones,在这种情况下,也要注意记录丢失的原因。

票数 0
EN

Stack Overflow用户

发布于 2018-07-20 18:08:19

考虑从查询生成中向下的父表开始。由于此查询使用了许多表,所以请使用many的GUI设计,其中的表应该按仔细的顺序排列,并检查每一步的结果。因为有连接关系,所以添加表会自动设置INNER JOIN ON子句。

  1. 首先,从Report_Quotidien开始,它是所有联接的基本来源。
  2. 然后,添加Rapport_minier。检查结果。
    • 然后,一张又一张地摆好桌子。检查结果。

  1. 然后,添加Rapport_moulin。检查结果。
    • 然后,一个接一个地添加它的唐纳表。检查结果。

如果其中一个检查结果产生零条记录,那么您就可以确定是哪个表导致了问题。我猜,您可能需要LEFT JOIN,而不是INNER JOIN在所有的链接,因为记录不完全对齐。同样,在GUI设计器中一步一步地这样做。

另一种方法是构建子查询、矿山查询和磨坊查询(没有主Report_Quotidien表),然后将这些查询连接到主查询中。还请注意使用表别名来缩短长名称的长度:

代码语言:javascript
复制
SELECT mn.*, ml.*
FROM (Report_Quotidien r
LEFT JOIN MineQuery mn ON mn.ID_minier = r.Minier)
LEFT JOIN MillQuery ml ON ml.ID_moulin = r.Moulin

MineQuery (让UI设计器设置链接字段,但将联接调整到左侧)

代码语言:javascript
复制
SELECT mine.*, d.*. d1.*, d2.*
FROM ((Rapport_minier mine
LEFT JOIN Données_mine d    ON d.ID_data_mine = mine.cible_quotidienne)
LEFT JOIN Données_mine_1 d1 ON d1.ID_data_mine = mine.cible_mensuelle)
LEFT JOIN Données_mine_2 d2 ON d2.ID_data_mine = min.Production

MillQuery (让UI设计器设置链接字段,但将联接调整到左侧)

代码语言:javascript
复制
SELECT mill.*, d.*. d1.*, d2.*
FROM ((Rapport_moulin mill
LEFT JOIN Données_moulin d ON d.ID_data_moulin = mill.cible_mensuelle)
LEFT JOIN Données_moulin_1 ON d1.ID_data_moulin = mill.Cible_quotidienne)
LEFT JOIN Données_moulin_2 ON d2.ID_data_moulin = mill.Usinage
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51445506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档