如何在MYSQL中对多个子查询使用where子句一次?

时间:2016-08-09 16:12:46

标签: mysql where-clause correlated-subquery

我有一个查询,我将多个聚合子查询连接在一起......

SELECT productionDate, shift, productID, workerID, infeedweight, outfeedweight, ...
FROM generalTable

    LEFT JOIN
    (SELECT productionDate, shift, productID, workerID, sum(weight) as infeedweight
        FROM infeed
#       WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'
        GROUP BY productionDate, shift, productID, workerID)
    t1 USING (productionDate, shift, productID, workerID)

    LEFT JOIN
    (SELECT productionDate, shift, productID, workerID, sum(weight) as outfeedweight
        FROM outfeed
#       WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'
        GROUP BY productionDate, shift, productID, workerID)
    t2 USING (productionDate, shift, productID, workerID)

    ... 

    etc

WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'

如果我用注释掉的指示的WHERE语句(但不是顶级的WHERE)运行它,则需要11秒。如果WHERE语句未注释,则需要0.1秒。结果完全一样。

有没有办法(可能使用优化器提示或其他东西)获取查询以在所有子查询中使用顶级WHERE子句而不必在任何地方重复它?

我使用的报告软件似乎只是为了在SQL语句的末尾放置一个WHERE子句,所以如果不可能,我可能需要做一些丑陋的黑客才能使它工作。

此外,报告软件将按班次,productID和workerID以及productionDate进行过滤。

编辑:更改了SQL表中的错误

0 个答案:

没有答案