当前位置: 首页 > 知识库问答 >
问题:

mysql - in 条件中有group by 导致无法执行?

虞承泽
2023-10-21
SELECT id, user_id, item_idFROM questionnaire_answer_old_0WHERE item_id IN (    SELECT item_id    FROM questionnaire_answer_old_0    GROUP BY user_id, item_id    HAVING COUNT(user_id) > 1 AND COUNT(item_id) > 1);

代码如上,子查询能正常执行。问题是整个执行时一直无反应,也不报错,一直显示正在查询,去掉子查询里的group by 就能正常执行,请问是什么原因?

共有1个答案

卞博简
2023-10-21

这种情况可能是由于子查询中的 GROUP BY 语句导致了优化器无法有效地执行查询。

在子查询中,你按照 user_iditem_id 对表进行了分组,并且只选择了满足条件的组。然而,在主查询中,你并没有对结果进行分组,并且选择了所有的列。这可能导致优化器无法有效地执行查询,因为它需要为每个 item_iduser_id 的组合生成一个结果。

为了解决这个问题,你可以尝试对主查询中的结果进行分组。这样可以消除子查询中分组的影响,使查询更加高效。例如:

SELECT id, user_id, item_idFROM (    SELECT item_id, user_id, COUNT(*) AS count    FROM questionnaire_answer_old_0    GROUP BY item_id, user_id    HAVING COUNT(user_id) > 1 AND COUNT(item_id) > 1) AS subqueryJOIN questionnaire_answer_old_0 ON item_id = item_id AND user_id = user_id;

上述代码将首先对 questionnaire_answer_old_0 表进行分组,并计算每个 item_iduser_id 组合的出现次数。然后,它使用 JOIN 将子查询的结果与原始表连接起来,以获取所需的列。

请注意,上述查询只是一个示例,并且可能需要根据实际情况进行调整。另外,如果表中的数据量非常大,那么这种查询可能会对性能产生一定的影响。在这种情况下,可能需要考虑其他优化措施,例如建立适当的索引或对数据进行预处理。

 类似资料:
  • 我在组件的列表中显示了一个项目数组。项目的属性之一是描述字段,其范围可以从一个单词到几个句子。 当描述太长,我想截断它,并显示一个按钮,将显示点击时的完整文本。是否截断和显示按钮的条件基于返回布尔值的函数: 然后我从组件的模板端使用这个函数,如下所示(ngFor的一小部分): 这里使用的CSS很简单: 目前,该行为非常偶然,我在控制台中收到错误: expressionchangedafterith

  • 问题内容: 嗨,我必须在具有大量ID的MySQL语句中使用IN条件。 例 IN语句可以包含的项是否有限制? 问题答案: 没有,请查看有关IN功能的手册: 列表中的值数仅受max_allowed_pa​​cket值限制。

  • 我在下面的manager.popbackbackstack行中遇到此错误。有办法解决这个问题吗?事情发生得很顺利。 致命异常:java.lang.IllegalStateException:在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2044)在android.support.v4.

  • 问题内容: 谁能告诉我两列中SQL中NOT IN条件的确切语法。 这是我用VBA编写的查询。 我想更改此子查询,它应应用于两列的组合,如下所示: 但这不起作用..... 问题答案: 您不能使用多于一列,但通常可以使用以下方法实现相同的效果:

  • 问题内容: 我在玩耍以获得更好的itertools感觉,所以我按数字对元组列表进行了分组,并试图得到结果组的列表。但是,当我将结果转换为列表时,会得到一个奇怪的结果:除了最后一组以外的所有内容都是空的。这是为什么?我以为将迭代器转换为列表效率不高,但永远不会改变行为。我猜列表是空的,因为遍历了内部迭代器,但是何时/何地发生? 问题答案: 从 文档中 : 返回的组本身就是一个与共享底层可迭代对象的迭

  • 问题内容: 我收到错误消息 “您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以找到在第1行的“ orderr”附近使用的正确语法” -因此,我认为错误是用了两个 ‘, 但是在我的代码中我没有用 ‘ 。注意,该表实际上被命名为订购者。 问题答案: 在大多数数据库中,您无法参数化表名称之类的对象名称,在MySQL中,理论上您可以做到,因为默认情况下,MySQL Connector