首页 > 解决方案 > 同一个访问查询中的右连接和内连接

问题描述

我正在尝试使用两个表进行内部连接和右连接。我不知道哪个应该是第一个。

从“qryInvnt_Especies_DAP”我想加入“Objectivo_DAP”表。

qryInvnt_Especies_DAP 表:

InvntID EspCodigo   DAP
15      Ec          15
16      Ec          5
17      Ac          13
18      Ac          19
19      Ac          10
20      Ac          20
21      Ac          4
22      Ac          13
23      Ac          16
24      Qr          14
25      Sb          13
26      Pb          50
27      Pb          20
28      Ec          12
29      Ec          30
30      Ec          5
31      Ec          7
32      Ec          40

Objectivo_DAP 表:

ObjtDAPID   EspCodigo   Objectivo      LowerDAP   UpperDAP
1           Ec          Rolaria_Ec     5          35
2           Ec          Desenrolar_Ec  35         55
3           Ec          Folha_Ec       55         200
4           Pb          Folha_Pb       45         200
5           Pb          Lenha_Pb       0          45

答案应该是:

InvntID EspCodigo   DAP   Objectivo 
15      Ec          15    Rolaria_Ec
16      Ec          5     Rolaria_Ec
26      Pb          50    Folha_Pb  
27      Pb          20    Lenha_Pb  
28      Ec          12    Rolaria_Ec
29      Ec          30    Rolaria_Ec
30      Ec          5     Rolaria_Ec
31      Ec          7     Rolaria_Ec
32      Ec          40    Desenrolar_Ec

它应该过滤存在于表“Objectivo_DAP”中的 EspCodigo(Ec 和 Pb),并根据 LowerDAP 或 UpperDAP 值插入一个名为 Objectivo 的列,其类型为 Objectivo(Rolaria_Ec、Desenrolar_Ec、Folha_Ec、...) “qryInvnt_Especies_DAP”表中的 DAP。 范围值 - 类

这是我的查询:过滤器 EspCodigo 的右连接和 Objectivo_DAP.Objectivo 的内连接(下或上)

SELECT qryInvnt_Especies_DAP.InvntID,
       qryInvnt_Especies_DAP.Nome,
       qryInvnt_Especies_DAP.EspCodigo,
       qryInvnt_Especies_DAP.DAP,
       Objectivo_DAP.Objectivo
FROM qryInvnt_Especies_DAP
RIGHT JOIN Objectivo_DAP ON qryInvnt_Especies_DAP.EspCodigo = Objectivo_DAP.EspCodigo,
INNER JOIN Objectivo_DAP ON qryInvnt_Especies_DAP.DAP >= Objectivo_DAP.LowerDAP
                        AND qryInvnt_Especies_DAP.DAP < Objectivo_DAP.UpperDAP;

任何帮助,将不胜感激。

谢谢,

标签: sqlms-access

解决方案


我不清楚你为什么认为两个连接是必要的。我认为一个简单的inner join做你想要的:

SELECT qe.InvntID,
       qe.Nome,
       qe.EspCodigo,
       qe.DAP,
       od.Objectivo
FROM qryInvnt_Especies_DAP as qe INNER JOIN 
     Objectivo_DAP as od
     ON qe.EspCodigo = od.EspCodigo
WHERE qe.DAP >= od.LowerDAP AND
      qe.DAP < od.UpperDAP;

推荐阅读