加入查询和子查询

Posted

技术标签:

【中文标题】加入查询和子查询【英文标题】:Joining a Query and sub-query 【发布时间】:2020-07-22 14:24:47 【问题描述】:

我正在尝试在 Access 中,但对如何执行此操作一无所知。而不是将子查询保存为不同的查询,然后将其加入主查询。

主查询(参考子查询):

SELECT tb200_IraDataIn.tb200_niarnum, tb206_IraAccount.tb206_IraAccDesc,
tb206_IraAccount.tb206_IraAccNum, tb15_Securities.tb15_IsActiveRegister,
tb15_Securities.tb15_NiarDesc, tb15_Securities.tb15_ManpikID, tb200_IraDataIn.tb200_Shovi, tb10_Afik.tb10_InvestTool, 
tb206_IraAccount.tb206_IsActive, tb200_IraDataIn.tb200_Shovi, 
tb200_IraDataIn.tb200_Shovi/SubQuery1.SumOftb200_Shovi AS Expr1
FROM SubQuery1 
     INNER JOIN (tb10_Afik 
         INNER JOIN (tb15_Securities 
           INNER JOIN (tb206_IraAccount 
              INNER JOIN tb200_IraDataIn 
              ON tb206_IraAccount.tb206_IraAccNum = tb200_IraDataIn.tb200_accountNumber) 
           ON tb15_Securities.tb15_NiarID = tb200_IraDataIn.tb200_niarnum) 
         ON (tb10_Afik.tb10_AfikID = tb200_IraDataIn.tb200_afik) AND (tb10_Afik.tb10_Erp =tb200_IraDataIn.tb200_ERP))
     ON SubQuery1.tb206_IraAccNum = tb206_IraAccount.tb206_IraAccNum
WHERE (((tb15_Securities.tb15_IsActiveRegister)=Yes) AND ((tb10_Afik.tb10_InvestTool)=1
Or (tb10_Afik.tb10_InvestTool)=4 Or (tb10_Afik.tb10_InvestTool)=21 Or 
(tb10_Afik.tb10_InvestTool)=3) AND ((tb206_IraAccount.tb206_IsActive)=Yes) AND 
(([tb200_IraDataIn].[tb200_Shovi]/[SubQuery1].[SumOftb200_Shovi])>0.1));


子查询(另存为SubQuery1):

SELECT tb206_IraAccount.tb206_IraAccDesc, tb206_IraAccount.tb206_IraAccNum, Sum(tb200_IraDataIn.tb200_Shovi) AS SumOftb200_Shovi
FROM tb206_IraAccount 
INNER JOIN tb200_IraDataIn ON tb206_IraAccount.tb206_IraAccNum = tb200_IraDataIn.tb200_accountNumber
WHERE (((tb206_IraAccount.tb206_IsActive)=Yes))
GROUP BY tb206_IraAccount.tb206_IraAccDesc, tb206_IraAccount.tb206_IraAccNum;
 

与现在不同,如何将子查询的sql语句放在主查询的同一个sql语句中?

谢谢!

【问题讨论】:

你的问题不清楚。如果您有一个有效的查询,为什么要更改它?你想解决什么问题? 实际上,在 MS Access 中,保存的查询往往比子查询更有效。见Allen Browne's tips on optimization。 【参考方案1】:

括号之间的嵌套。主查询中的其他内容没有任何变化。

SELECT
...
FROM (SELECT tb206_IraAccount.tb206_IraAccDesc, tb206_IraAccount.tb206_IraAccNum, Sum(tb200_IraDataIn.tb200_Shovi) AS SumOftb200_Shovi
FROM tb206_IraAccount 
INNER JOIN tb200_IraDataIn ON tb206_IraAccount.tb206_IraAccNum = tb200_IraDataIn.tb200_accountNumber
WHERE (((tb206_IraAccount.tb206_IsActive)=Yes))
GROUP BY tb206_IraAccount.tb206_IraAccDesc, tb206_IraAccount.tb206_IraAccNum) AS SubQuery1
... 

【讨论】:

以上是关于加入查询和子查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询和子查询

hive UNION和子查询

多个内连接和子查询的查询优化

laravel 中的查询和子查询连接

使用连接语句和子查询准备 CakePHP 查询

Oracle --- 多表查询和子查询