选择中的MySQL子查询与外部字段的链接

时间:2018-02-15 18:00:36

标签: mysql ms-access subquery

我将旧软件(使用MS-ACCESS MDB)转换为mySQL。 我有一个需要很长时间才能运行的查询(实际上我在等待5分钟后中断运行) 我怎么写呢?

SELECT pa_ID, pa_PRODUCT_ID, pr_ID,pr_NAME,Sum(pa_KILOS) as IN_KILOS, 
    (select sum(pl_KILOS) from POLHSH where POLHSH.pl_PRODUCT_ID = pa_PRODUCT_ID and POLHSH.pl_PARALABH_ID = pa_ID) as OUT_KILOS From PARALABH, PRODUCTS WHERE pa_company_id=1 GROUP BY pa_ID, pa_PRODUCT_ID,pr_ID, pr_NAME HAVING pa_ID=241 and pr_id=pa_PRODUCT_ID

提前致谢

1 个答案:

答案 0 :(得分:1)

考虑避免为每行分别运行SUM的相关子查询,并使用两个聚合查询的连接,每个查询通过分组字段运行SUM一次。此外,使用explicit joins,这是加入表/视图时的当前SQL标准。

请将列别名和名称调整为实际值,如下所示。

SELECT t1.*, t2.OUT_KILOS
FROM
  (SELECT pa.pa_ID,
          pa.pa_PRODUCT_ID,
          pr.pr_ID,
          pr.pr_NAME,
          SUM(pa.pa_KILOS) AS IN_KILOS
   FROM PARALABH pa
   INNER JOIN PRODUCTS pr
      ON pr.pr_id = pa.pa_PRODUCT_ID
   WHERE pa.pa_company_id = 1
   GROUP BY pa.pa_ID,
            pa.pa_PRODUCT_ID,
            pr.pr_ID,
            pr.pr_NAME
   HAVING pa.pa_ID = 241
  ) AS t1

INNER JOIN
  (SELECT POLHSH.pl_PRODUCT_ID,
          POLHSH.pl_PARALABH_ID 
          SUM(pl_KILOS) As OUT_KILOS
   FROM POLHSH
   GROUP BY POLHSH.pl_PRODUCT_ID,
            POLHSH.pl_PARALABH_ID 
  ) AS t2

ON t2.pl_PRODUCT_ID = t1.pa_PRODUCT_ID
AND t2.pl_PARALABH_ID = t1.pa_ID