【发布时间】:2023-03-17 03:55:01
【问题描述】:
抱歉这个措辞不好的问题..但我不知道如何解释这个...
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,因为该字段在查询中,而不是其中一个表。
有没有办法解决这个问题?
更新:我已将此作为查询重整问题重新发布 - 感谢您的建议。How to refactor select subqueries into joins?
【问题讨论】:
-
您能否根据您的条件标准提供样本数据和期望的结果?不知道我真的明白你在问什么......听起来像 CASE 语句可能能够做你正在寻找的东西(如果不满足某些条件,则运行子查询)。
-
不是真的..我的意思是我可以..但它是巨大的数据,子查询就像 25 行,真的与问题无关......我可以用一个案例来做标准, 或者 if.. 但是如何从另一个查询字段中获取数据?
-
可能有一种方法可以更好地将 SQL 查询编码为连接,或者更好地编码子查询。您能否发布仅包含典型部分的子查询的精简版本。见SSCCE