【问题标题】:how to select data from another column in the same query?如何从同一查询中的另一列中选择数据?
【发布时间】: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

标签: mysql subquery


【解决方案1】:

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

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

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

【讨论】:

  • 如果子查询返回的记录我有 15 个计数。将它们放在 from 中要慢得多。我很想简化它,但在我的测试中,这似乎是最快的方法。
  • 关于进一步研究.. 我明白你的意思了.. 如果我将子查询作为连接放入 where,我可以多次使用它们。按建议重新发布 - 请参阅上面的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多