1

对不起措辞不佳的问题..但我不知道如何解释这个......

MySQL... 我有一个查询,其中包含几个极其复杂的子查询。我从一张表中选择,我需要根据各种标准找出每条记录的“位置”..所以我有这个

 Select record.id, record.title 
    (select count(*) from (complex-query-that-returns-newer-records)) as agePlace,           
    (select count(*) from (complex-query-that-returns-records-with-better-ROI)) as ROIPlace...
 From record...

现在的问题是查询速度很慢——正如我所期望的那样,给出了所需的处理量。但我意识到在某些情况下,2 个子查询的结果是相同的,我不需要运行子查询两次..(或者在我的代码中两次)。因此,我想将其中一个子查询包装在 if 语句中,如果满足条件,请使用已计算该数据的另一列中的值,否则,正常运行子查询。

我试过只放置另一个子查询的别名,但它说未知列 totalSales 因为该字段在查询中,而不是其中一个表。

有没有办法解决?

更新:我已将此作为查询重构问题重新发布-感谢您的建议。如何将选择子查询重构为联接?

4

1 回答 1

1

真的没有办法解决这个问题。SQL 引擎编译查询以运行整个查询,而不仅仅是其中的一部分。在编译期间,查询引擎不知道结果是否相同。

更有可能的是,您可以将子查询移动到from子句并在那里找到优化。

如果您对此感兴趣,您应该使用您正在使用的实际查询编写另一个问题。这是一个与这个不同的问题(“如何改写这个查询”而不是“我怎样才能有条件地让这个运行”)。

于 2013-06-01T23:24:35.723 回答