右连接和内连接在同一个访问查询中

时间:2020-10-15 20:56:06

标签: sql ms-access

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

我要从“ 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或以Objectivo类型(Rolaria_Ec,Desenrolar_Ec,Folha_Ec等)插入名为Objectivo的列。 “ qryInvnt_Especies_DAP”表中DAP的UpperDAP值。 Range Values - Classes

这是我的查询:过滤器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;

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

我不清楚您为什么认为必须进行两次联接。我认为一个简单的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;