我正试图就我为一家矿业公司收集的一组数据做一份报告。
每天,一个采矿项目将从他们的矿山和工厂发送数据。这些数据由3组读数组成:它们产生了什么,当天计划了什么,以及每月的目标是什么。一个月的目标不变,这个月的目标通常是不变的,但在特殊情况下会发生变化。
因此,我制作了一个铣削和采矿阅读表,并将3个实例合并到挖掘/铣削报告中。
下面是我的数据库的关系图:

现在我想计算一下每次阅读所得到的百分比。因此,我需要采取的生产读数,并除以他们的同等的每日目标。
问题是,我在SQL和Access方面几乎是个新手
我仍在试图加入三个阅读表,以挖掘/碾磨一个单一的报告。我试过这个:
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:]));它给我纠正字段,但没有数据,即使我有数据测试。下面是设计模式中的样子:设计
发布于 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。
这就造成了一个可怕的查询混乱:
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]));发布于 2018-07-20 15:22:19
您必须使用以下格式:
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]或者这个
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,在这种情况下,也要注意记录丢失的原因。
发布于 2018-07-20 18:08:19
考虑从查询生成中向下的父表开始。由于此查询使用了许多表,所以请使用many的GUI设计,其中的表应该按仔细的顺序排列,并检查每一步的结果。因为有连接关系,所以添加表会自动设置INNER JOIN ON子句。
如果其中一个检查结果产生零条记录,那么您就可以确定是哪个表导致了问题。我猜,您可能需要LEFT JOIN,而不是INNER JOIN在所有的链接,因为记录不完全对齐。同样,在GUI设计器中一步一步地这样做。
另一种方法是构建子查询、矿山查询和磨坊查询(没有主Report_Quotidien表),然后将这些查询连接到主查询中。还请注意使用表别名来缩短长名称的长度:
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.MoulinMineQuery (让UI设计器设置链接字段,但将联接调整到左侧)
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.ProductionMillQuery (让UI设计器设置链接字段,但将联接调整到左侧)
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.Usinagehttps://stackoverflow.com/questions/51445506
复制相似问题